🏠个人主页: 黑洞晓威
🧑个人简介:大家好,我是晓威,一个普普通通的大二在校生,希望在CSDN中与大家一起成长。🎁如果大佬你也在正在学习Java,欢迎来到我的博客查漏补缺,如果有哪里写的不对的地方也欢迎大家指正啊。
多态
多态的概念:
多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。
可以把不同的子类对象都当作父类来看,进而屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。
- 多态是方法的多态
- 多态需要继承关系,方法需要重写,父类引用指向子类
Father f = new Son();
- static(属于类,不属于实例)
final(常量无法改变,子类无法继承父类),
private(私有的不能重写)
这三个修饰词修饰的方法没有多态
- 父类
public void run(){
System.out.println("run");
}
public void test(){
System.out.println("Person");
}
- 子类
public void say(){
System.out.println("say");
}
public void test(){
System.out.println("Student");
}
- 运行
public static void main(String[] args) {
//父类的引用指向子类,但不能直接调用子类的方法
Person person=new Student();
//执行父类的run()方法
person.run();
//子类重写了父类的方法,则执行子类的方法
person.test();
//报错:能执行那些方法看左边的类型,父类不能直接调用子类的方法
person.say();
//类型转换后可以调用子类的方法
((Student) person).say();
//子类对象可以调用自己的与父类的方法
Student student = new Student();
student.say();
}
instanceof和类型转换
instanceof关键字:(x instanof y)判断x与y是否有父子关系
public static void main(String[] args) {
//Object>Person>Student
//Object>Person>Teacher
//Object>String
Object object = new Student();
System.out.println(object instanceof Student);//T
System.out.println(object instanceof Person);//T
System.out.println(object instanceof Object);//T
System.out.println(object instanceof Teacher);//F
System.out.println(object instanceof String);//F
System.out.println("=================");
Person person = new Student();
System.out.println(person instanceof Student);//T
System.out.println(person instanceof Person)//T System.out.println(person instanceof Object);//T
System.out.println(person instanceof Teacher);//F
//报错,String与Persong同处于Object子类,两者没有关系
//System.out.println(person instanceof String);
System.out.println("=============");
Student student = new Student(); System.out.println(student instanceof Student);
System.out.println(student instanceof Person);
System.out.println(student instanceof Object);
//报错,teacher与student无关
//System.out.println(personstudent instanceof Teacher);
//String与student无关
//System.out.println(person instanceof String);
}
类型转换
public static void main(String[] args) {
//高<-----低,低转高可以直接转换
Person A = new Student();
A.father();//father();父类的方法,son();子类的方法
//A.son();报错
//需要将A转化为Student类型,高转低需要强制转换
//方法1
Student student = (Student)A;
student.son();
//方法2
((Student) A).son();
=================================
Student student1 = new Student();
//低转高可以直接转化,可能丢失自己本来的方法
Person person=student1;
//person.son();报错
}
多态的主要作用:方便方法的调用,减少重复的代码,简洁。