多态:将多个对象调用同一个方法,得到不同的结果
-
多态的语法格式:
父类类名 引用名称 = new 子类类名();
-
当是多态时,该引用名称只能访问父类中的属性和方法,但是优先访问子类重写以后的方法
-
满足多态的条件:
子类必须继承父类
子类重写父类的方法
父类类名 引用名称 = new 子类类名();
-
多态好处
减少代码的冗余性
class Pet{ //方法 public void eat(){ System.out.println("宠物正在吃东西。。。。。。"); } } //编写狗的子类继承宠物父类 class Dog extends Pet{ //重写父类的eat方法 public void eat(){ System.out.println("狗正在吃狗粮......"); } //编写独有的方法:玩飞盘 public void play(){ System.out.println("狗正在玩飞盘。。。。。"); } } //编写猫的子类继承宠物父类 class Cat extends Pet{ //重写父类的吃的方法 public void eat(){ System.out.println("猫正整吃猫粮。。。。。"); } //编写独有的方法:抓老鼠 public void catching(){ System.out.println("猫正在抓老鼠......"); } } //编写主人类 class Master{ //方法:喂养狗 /*public void feed(Dog dog){ dog.eat(); } //方法:喂养猫 public void feed(Cat cat){ //Cat cat = new Cat(); cat.eat(); }*/ /* 总结得到:以上喂养的猫和狗都属于宠物,因此能否编写主人喂养宠物方法 */ public void feed(Pet pet){ //Pet pet = new Dog(); Pet pet = new Cat(); pet.eat(); } } //编写测试类 class Test{ public static void main(String[] args){ //创建主人对象 Master m = new Master(); //创建狗对象 Dog d = new Dog(); //主人喂养宠物 m.feed(d); m.feed(new Cat()); } }
-
多态中的两种类型转换
-
向上转型,也叫做自动类型转换,构成多态
- 父类类型 引用名称 = new 子类类名();
- 当是多态时,该引用名称只能访问父类中的属性和方法,但是优先访问子类重写以后的方法
-
向下转型,也叫做强制类型转换
-
当是多态时,并且访问子类独有的属性或方法时,则必须进行向下转型
-
当进行向下转型时,建议先进行判断,当合法则在转为对应的类型,则使用instanceof关键字,否则可能会出现类型转换异常java.lang.ClassCastExceptio
-
instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例
boolean result = obj instanceof Class
其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。
-
-