第九章:多态

xiaoxiao2021-02-27  179

抽象类

抽象类和抽象方法必须用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(); } }

转载请注明原文地址: https://www.6miu.com/read-13572.html

最新回复(0)