Java基础学习笔记-多态

多态

基本介绍

多态的概念:同一个实体同时具有多种形式同一个类型的对象,执行同一个行为,在不同的状态下会表现出不同的行为特征。

多态的格式:

  • 父类类型范围 > 子类类型范围
父类类型 对象名称 = new 子类构造器;
接口	  对象名称 = new 实现类构造器;

多态的执行:

  • 对于方法的调用:编译看左边,运行看右边(分派机制)
  • 对于变量的调用:编译看左边,运行看左边

加端端老师免费领取更多Java资料

Java基础学习笔记-多态

 

多态的使用规则:

  • 必须存在继承或者实现关系
  • 必须存在父类类型的变量引用子类类型的对象
  • 存在方法重写

多态的优势:

  • 在多态形式下,右边对象可以实现组件化切换,业务功能也随之改变,便于扩展和维护。可以实现类与类之间的解耦
  • 父类类型作为方法形式参数,传递子类对象给方法,可以传入一切子类对象进行方法的调用,更能体现出多态的扩展性与便利性

多态的劣势:

  • 多态形式下,不能直接调用子类特有的功能,因为编译看左边,父类中没有子类独有的功能,所以代码在编译阶段就直接报错了!
public class PolymorphicDemo {
    public static void main(String[] args) {
        Animal c = new Cat();
        c.run();
        //c.eat();//报错  编译看左边 需要强转
        go(c);
        go(new Dog);   
    }
    //用 Dog或者Cat 都没办法让所有动物参与进来,只能用Anima
    public static void go(Animal d){}
    
}
class Dog extends Animal{}

class Cat extends Animal{
    public void eat();
    @Override
    public void run(){}
}

class Animal{
    public void run(){}
}

上下转型

基本数据类型的转换: 1.小范围类型的变量或者值可以直接赋值给大范围类型的变量。 2.大范围类型的变量或者值必须强制类型转换给小范围类型的变量。

引用数据类型的自动类型转换语法:子类类型的对象或者变量可以自动类型转换赋值给父类类型的变量。

父类引用指向子类对象

  • 向上转型(upcasting):通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换
  • 向下转型(downcasting):通过父类对象(大范围)实例化子类对象(小范围),这种属于强制转换
public class PolymorphicDemo {
    public static void main(String[] args){
        Animal a = new Cat();//向上转型
        Cat c = (Cat)a;//向下转型
    }
}
class Animal{}
class Cat extends Animal{}

instanceof

instanceof:判断左边的对象是否是右边的类的实例,或者是其直接或间接子类,或者是其接口的实现类

  • 引用类型强制类型转换:父类类型的变量或者对象强制类型转换成子类类型的变量,否则报错
  • 强制类型转换的格式:类型 变量名称 = (类型)(对象或者变量)
  • 有继承/实现关系的两个类型就可以进行强制类型转换,编译阶段一定不报错,但是运行阶段可能出现类型转换异常 ClassCastException
public class Demo{
    public static void main(String[] args){
		Aniaml a = new Dog();
		//Dog d = (Dog)a;
        //Cat c = (Cat)a; 编译不报错,运行报ClassCastException错误
        if(a instanceof Cat){
            Cat c = (Cat)a; 
        } else if(a instanceof Dog) {
            Dog d = (Dog)a;
        }
    }
}
class Dog extends Animal{}
class Cat extends Animal{}
class Animal{}
上一篇:shell函数


下一篇:cut