Java里的多态

Java里的多态

多态是同一个行为具有多个不同表现形式或形态的能力。

在Java中,多态的表达式为Father f = new Son(),其中Father类为Son类的父类。f可以调用父类中的所有方法,当子类把父类中的方法重写之后,子类就会调用重写之后的方法。

public class Person {	//父类
    public void run(){	//父类方法
        System.out.println("Person");
    }
}
public class Student extends Person {	                  //子类
    @Override
    public void run() {					//重写父类的run()
        System.out.println("Student");
    }
    public void eat(){					//子类自己的方法
        System.out.println("tomato");
    }
}
public class Application {		         //测试类
    public static void main(String[] args) {
        Student s1 = new Student();		//子类自己实例化
        Person s2 = new Student();		//Person为Student父类 实现多态
        Object s3 = new Student();		//Object是所有类的父类  实现多态
        s1.run();
        s2.run();
    	s1.eat();
    //	s2.eat();	//报错(找不到该方法)		//s2是多态的得到实际为父类对象,故没有子类方法
    }
}

运行结果:

运行结果

多态的注意事项:*

1.多态只是方法的多态,属性没有多态。
2.多态是父类和之类之间的联系,如果强制没有没有联系的类使用多态,会报类型转换异常 ClassCastException
3.多态的条件:两个类之间要有继承关系,方法要重写(不重写无意义)父类引用指向之类对象

方法不能重写的几种情形:

方法不能被重写的几种情形:
    1.被static修饰 为类方法不能被重写
    2.被final修饰  为常量
    3.被private修饰  private修饰的方法为私有方法,也不能重写

补充:

​ Java关键字instanceof只能用在两个有关系的类做比较,当使用在毫无联系的类作比较时会爆红。

System.out.println(s2 instanceof Student);//true	本类
System.out.println(s2 instanceof Teacher);//false	Teacher为Person类的子类,与Student无关
System.out.println(s2 instanceof Person);//true		Person为Student的父类
System.out.println(s2 instanceof Object);//true		Object为所有类的父类
System.out.println(s2 instanceof String);//false	String类与Student没有关系
posted @ 2020-05-20 09:44  小徐学狂  阅读(147)  评论(0编辑  收藏  举报