大家好,今天来给大家分享一下Java的多态
Java当中的多态,就是同一方法可以根据发送对象的不同而采用多种不同的行为方式
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多
Java多态存在的条件:
1.有继承关系
2.子类重写父类方法
3.父类引用子类对象
注意一点:
多态指的是方法的多态,属性没有多态这一说
多态可以实现动态编译,增强可扩展性
新建Application 类
package Demo02;
public class Application {
public static void main(String[] args) {
}
}
新建Person类
package Demo02;
public class Person {
}
新建student类
package Demo02;
public class student {
}
让student 类 继承Person
package Demo02;
public class student extends Person {
}
代码实例
package Demo02;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
// new student(); 创建对象
//new Person();
// 可以指向的引用类型是不确定的,父类的引用指向子类
student s1 =new student(); //可以很快理解
// student student =new student();
Person S2 =new student(); //父类的引用指向子类的类型
//因为他俩本来就有继承关系
// String S3 =new student(); 这样是不行的,因为String和他没有关系
Object S3 = new student(); //这样也可以,因为Object类是所有类的老祖宗
}
}
在测试类上写
package Demo02;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
new student(); // 创建对象
//new Person();
// 可以指向的引用类型是不确定的,父类的引用指向子类
student s1 =new student(); //可以很快理解
student student =new student();
Person S2 =new student(); //父类的引用指向子类的类型
//因为他俩本来就有继承关系
// String S3 =new student(); 这样是不行的,因为String和他没有关系
Object S3 = new student(); //这样也可以,因为Object类是所有类的老祖宗
S2.run(); //S2的类型是Person
}
}
在父类上写
package Demo02;
public class Person {
public void run(){
System.out.println("run");
}
}
显示结果
子类student继承Person,子类重写父类的方法
package Demo02;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
new student(); // 创建对象
//new Person();
// 可以指向的引用类型是不确定的,父类的引用指向子类
student s1 =new student(); //可以很快理解
// student student =new student();
Person S2 =new student(); //父类的引用指向子类的类型
//因为他俩本来就有继承关系
// String S3 =new student(); 这样是不行的,因为String和他没有关系
Object S3 = new student(); //这样也可以,因为Object类是所有类的老祖宗
S2.run(); //属于Person类
s1.run(); //属于student类
//student 这个类是子类,Person 这个类是父类
//同时我们这个程序里也是继承的关系
//子类重写父类的方法,执行子类的方法
}
}
这个时候,Person类不用动
package Demo02;
public class Person {
public void run(){
System.out.println("run");
}
}
在student类当中写方法
package Demo02;
public class student extends Person { //继承
public void eat(){ //写方法
System.out.println("eat");
}
@Override
public void run() {
System.out.println("run");
}
}
package Demo02;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
new student(); // 创建对象
//new Person();
// 可以指向的引用类型是不确定的,父类的引用指向子类
//student 可以调用的方法都是自己或继承父类的
student s1 =new student(); //可以很快理解
// student student =new student();
Person S2 =new student(); //父类的引用指向子类的类型
//Person 父类型,可以指向子类,但是不可以调用子类独有的方法
//因为他俩本来就有继承关系
// String S3 =new student(); 这样是不行的,因为String和他没有关系
Object S3 = new student(); //这样也可以,因为Object类是所有类的老祖宗
S2.run(); //属于Person类
s1.run(); //属于student类
//student 这个类是子类,Person 这个类是父类
//同时我们这个程序里也是继承的关系
// S2.eat() S2无法对eat实现调用
s1.eat(); //s1可以实现对eat的调用
//因为S2的类型是Person,而eat是写在student类当中的
//对象可以执行那些方法,主要看对象左边的类型,和右边关系不大
}
}
多态的注意事项:
1.多态是方法的多态,属性没有多态
2.需要有继承的关系,之间要有联系
比如说,person类和 string 这两个东西本身就没有关系
3.存在关系,继承关系,方法需要重写,父类引用指向子类对象
4.可是有些方法不可以重写:
static 方法 属于类,不是方法
final 常量
3.private ,这是私有方法,也不可以重写
好了,Java的多态就讲到这里,谢谢大家