继承和多态
封装回顾
概念:属性私有化(private),提供公共(public)setter&getter方法访问私有属性。
目的:提高数据的安全性。(额外进行控制)
抽象
前提:具有相同属性和方法。
场景:对象 -> 类 、类 -> 父类
继承
父类:类抽象的到父类,必须满足is-a关系。
都是类(class),父类更抽象、子类更具体。
继承:将相同的属性和方法抽象到父类中,子类继承(extends)父类,子类就可以继承父类中public+protected类型的的属性和方法。
继承优点:提高维护性和扩展性。
子类会默认调用父类无参数的构造方法。
重写:父子类中,方法名、参数、返回值都相同。权限不能缩小。
多态
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
eg:
public class Dog extends Pet{
public Dog(String kind){
super(kind);//调用父类构造方法
}
@Override
public String bark(){
return getName() + "在叫:汪汪";
}
public void loolDoor(){
System.out.println(getName() + "在看门");
}
}
public class Cat extends Pet{
public Cat(String kind){
super(kind);
}
@Override
public String bark(){
return super.bark() + "喵喵";
}
public void catchMouse(){
System.out.println(getName() + "在捉老鼠");
}
}
public class Pet {
//属性
private String name;
private int age;
private String sex;
private String kind;
//初始化块
{
this.name = "未知";
}
//构造方法(方法重载)
public Pet(String kind) {
this.kind = kind;
}
//成员方法
public void eat(String food){
System.out.println(name + "在吃" + food);
}
public void sleep(){
System.out.println(name + "在睡觉");
}
public String bark(){
return name + "在叫:";
}
//getter&setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age >= 20 || age < 0){
System.out.println("数据错误!");
}else{
this.age = age;
}
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getKind() {
return kind;
}
}
public class Master {
public static void main(String[] args) {
Dog pet1 = new Dog("金毛");
pet1.setName("旺财");
pet1.eat("骨头");
((Dog)pet1).loolDoor();
System.out.println(pet1.bark());
Cat pet2 = new Cat("波斯");
pet2.setName("咪咪");
pet2.eat("鱼");
((Cat)pet2).catchMouse();
System.out.println(pet2.bark());
}
}
ljm要加油