第九章:多态

来源:互联网 发布:安卓工具类软件 知乎 编辑:程序博客网 时间:2024/06/05 13:30

抽象类


抽象类和抽象方法必须用abstract关键字修饰
格式
抽象方法只需要声明不需实现,需要子类实现
格式:abstract class 类名 {}
public abstract void eat();(抽象方法可以没有返回值和有返回值)
抽象内中可以定义属性和方法(构造方法也可以);

有抽象方法的类是抽象类,抽象类必须被继承,(所有的)抽象方法必须被重写
抽象类不能实例化 具体由子类去实例化


按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
抽象类的子类
要么是抽象类


多态


多态:一个对象的多种状态的行为
多态的三个条件:.要有继承 ,有方法重写,有父类引用指向子类对象
多态的好处 :提高了程序的维护性(由继承保证)
提高了程序的扩展性(由多态保证)
多态的弊端
不能访问子类特有功能

多态中的转型
向上转型
从子到父
父类引用指向子类对象
向下转型
从父到子
父类引用转为子类对象

public static void main(String[] args) {
Person[] p = new Person[2];
p[0] = new Teacher();
p[1] = new Student();//向上转型 只能调用父类提供的方法和属性
for(Person per:p){
per.test();
//判断一个对象是否属于当前这个类
if(per instanceof Teacher){
Teacher t = (Teacher)per;//向下转型,才能调用子类的方法(还能调用父类的方法)
t.teach();
}
if(per instanceof Student){
Student stu = (Student)per;
stu.study();
}
}
}

}




向上向下转型


对象转型
一个基类的引用类型变量可以指向其子类的对象,向上转型

Animal a =new Dog("金毛","黄色"); //Animal是基类,Dog是子类
一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)
Dog d =new Dog("萨摩耶","白色");
System.out.println("我的毛色是:"+d.furColor);//furColor属性是Dog类的成员变量量
Animal a =new Dog("金毛","黄色");//Animal是基类,Dog是子类
System.out.println("我的⽑毛⾊色是:"+a.furColor);//异常,Animal基类无法访问,Dog类的furColor属性
可以使用引用变量instance类名 来判断该引⽤变量所指向的对象是否属于该类
Dog d =new Dog("萨摩耶","白色");
if(d instanceof Animal){System.out.println("引⽤用对象d是Animal类型");
}
子类的对象可以当做基类的对象来使⽤,称作向上转型,反之成为向下转型
Dog d =new Dog("萨摩耶","白色");
Animal animal = d;//向上转型


使用子类的特有功能
A:创建子类对象调用方法即可。
B:把父类的引用强制转换为子类的引用。(向下转型)
对象间的转型问题:
向上转型: Fu f = new Zi();
向下转型: Zi z = (Zi)f; //要求该f必须是能够转换为Zi的。

向上转型
* 虽然实例化创建的为子类对象,但是申明的为父类,
* 向上转型只能调用父类提供的方法和属性,不能调用子类提供的属性和方法
Person p = new Teacher();
p.setName("张三");
向下转型可以调用父类以及子类提供的所有公有化的属性或方法
Teacher t = (Teacher)p;//向下转型,基于向上转型
t.setName("张六");
t.setAge(20);
Person stu = new Student();

/向上转型 子类对象调用父类对象 提供的方法和属性
Person p = new Student();
p.setName("张三");
p.setAge(22);
//向下转型 调用父类以及子类提供的所有公有化的属性或方法
Student s = (Student) p;
s.setSchool("八维");
s.setGrade("高中");
s.show();

Person pe = new Teacher("一中", "java讲师", "java");
pe.setName("李老师");
pe.setAge(40);
pe.show();
}
}

原创粉丝点击