java中的多态

 多态
1.即同一方法可以根据发送对象的不同而采用多种不同的行为方式

2.一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多
3.多态存在的条件
(1)有继承关系
(2)子类重写父类方法
(3)父类引用指向子类对象
注意:多态是方法的多态,属性没有多态性

比如你是一个酒神,对酒情有独钟。某日回家发现桌上有几个杯子里面都装了白酒,从外面看我们是不可能知道这是些什么酒,只有喝了之后才能够猜出来是何种酒。你一喝,这是剑南春、再喝这是五粮液、再喝这是酒鬼酒….在这里我们可以描述成如下:

      酒 a = 剑南春

      酒 b = 五粮液

      酒 c = 酒鬼酒

      …

      这里所表现的的就是多态。剑南春、五粮液、酒鬼酒都是酒的子类,我们只是通过酒这一个父类就能够引用不同的子类,这就是多态——我们只有在运行的时候才会知道引用变量所指向的具体实例对象。

多态注意事项:

1.多态是方法的多态,属性没有多态

2.父类和子类,有联系 类型转换异常! CLassCastException !

3.存在条件: 继承关系,方法需要重写,父类引用指向子类对象! Father f1 = new Son();
(1).static 方法,属于类,它不属于实例

(2).final 常量:

(3

//父类
package demo06;

public class Person {
    public void run() {
        System.out.println("run");
    }


}





子类

package demo06;

public class Student extends Person{
    @Override
    public void run() {
        System.out.println("son");
    }
    public void eat(){
        System.out.println("eat");
    }
}



//输出
package demo06;
//多态
import demo06.Person;
import demo06.Student;

public class Application02 {
    public static void main(String[] args) {
        //一个对象的实际类型是确定的
        //可以指向的引用类型就不确定了
        //Student 能调用的方法都是自己的或者继承父类的
        Student s1 = new Student();
        //Person  父类,可以指向子类,但是不能调用子类独有的方法
        Person s2 = new Student();//父类的引用的指向了子类
        Object s3 = new Student();
        s2.run();//子类重写了父类的方法,那就执行子类的方法
        s1.run();



        //对象执行哪些方法,主要看对象左边的类型,和右边的关系不大
        s1.eat();
        s2.eat();//不能调用
    }
}

).private方法;

你可能感兴趣的:(java,java,开发语言)