封裝:屬性設(shè)置為private的,封裝在類(lèi)的內(nèi)部,對(duì)外提供public的get/set方法供外部調(diào)用。
好處:在類(lèi)的內(nèi)部對(duì)參數(shù)做一些限制,防止非法調(diào)用。
在類(lèi)的外部可以訪問(wèn)到屬性。
封裝后的,getter setter 可以用IDE自動(dòng)生成:右鍵Generate
private String name;
private int age;
private float score;
// 獲取屬性的值
public float getScore() {
return score;
}
// 設(shè)置屬性的值
public void setScore(float s){
if(s<0 || s>150){
System.out.println("參數(shù)不合法!");
}else{
score = s;
}
}
public int getAge(){
return age;
}
public void setAge(int a){
if (a<3||a>30){
System.out.println("參數(shù)不合法");
}else{
age = a;
}
}
}
繼承:使用extends關(guān)鍵字,繼承父類(lèi)的屬性和方法,不繼承構(gòu)造結(jié)構(gòu)
沒(méi)有顯式寫(xiě)extends時(shí),默認(rèn)是從Object繼承的
每個(gè)類(lèi)只能有一個(gè)父類(lèi),但是可以有多層繼承,比如一個(gè)類(lèi)由一個(gè)父類(lèi)、祖父類(lèi)、曾祖父類(lèi)...
子類(lèi)除了繼承父類(lèi)的屬性和方法,也可以有自己的屬性和方法。
重寫(xiě)Override、重載OverLood的差別:
重寫(xiě):子類(lèi)重寫(xiě)父類(lèi)同名的方法
toString() 構(gòu)造方法 set/get方法
super 超類(lèi)/父類(lèi),調(diào)用父類(lèi)的構(gòu)造方法
class Dog extends Pet {
private String color;
public Dog(String name, int age, int health) {
// super 超類(lèi)/父類(lèi),調(diào)用的父類(lèi)的構(gòu)造方法
super(name, age, health);
}
public Dog(String name, int age, int health, String color) {
super(name, age, health);
this.color = color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
多態(tài):自類(lèi)的對(duì)象可以當(dāng)做父類(lèi)來(lái)使用
public class Demo04 {
// 寵物看病的方法
public static void doctor_shenyi(Pet pet){//傳Pet 或Pet的子類(lèi)
if(pet.getHealth()<50){
System.out.println("打針");
pet.setHealth(pet.getHealth()+20);
}else{
System.out.println("按摩");
pet.setHealth(pet.getHealth()+2);
}
}
public static void main(String[] args) {
Dog dog =new Dog("小白",3,40);
doctor(dog);
doctor_shenyi(dog);//方法的定義的是Pet類(lèi)型的參數(shù),實(shí)際傳的是Dog的類(lèi)型
System.out.println(dog.getHealth());
Pet pet = new Pet("小小",2,50);
doctor_shenyi(pet);
Cat cat = new Cat("加菲",1,80);
doctor_shenyi(cat);
TaiDi taiDi = new TaiDi("泰迪",2,70,"白色");
doctor_shenyi(taiDi);
doctor(taiDi);
}
}
class Cat extends Pet{
public Cat(String name, int age, int health) {
super(name, age, health);
}
}
抽象類(lèi):abstract 修飾
1.有抽象方法的類(lèi)是抽象類(lèi),抽象方法只有聲明,沒(méi)有實(shí)現(xiàn)
2.抽象類(lèi)中既可以有抽象方法,也可以由普通方法
3.抽象類(lèi)不能實(shí)例化,無(wú)法new一個(gè)對(duì)象
4.抽象類(lèi)主要是為了被繼承,子類(lèi)必須實(shí)現(xiàn)里面的抽象方法,如果子類(lèi)不是實(shí)現(xiàn)抽象方法子類(lèi)也只能定義抽象方法
|