多态
多态格式:父类类型 变量名 = new 子类类型();
多态体现为父类引用变量可以指向子类对象:定义了一个父类类型的引用,指向新建的子类类型的对象,由于子类是继承他的父类的,所以父类类型的引用是可以指向子类类型的对象的。
多态对变量的引用以父类为准,如下代码:
class Person{ int age = 11; } class Student extends Person{ int age = 1; } public class test { public static void main(String args[]) { Person p =new Student(); System.out.println(p.age);// 输出: 11 本质上Studnet的引用是Person,所以age是Person中的age } } 当子类和父类中存在同名方法时,子类覆盖父类的方法,如下代码: class Person{ void show() { System.out.println("Person"); } } class Student extends Person{ void show() { System.out.println("Student"); } } public class test { public static void main(String args[]) { Person p =new Student(); p.show();//输出 Student } }
注,父类无法访问子类独有的方法
class Person{ void show() { System.out.println("Person"); } } class Student extends Person{ void show() { System.out.println("Student"); } void study(){//Studnet中独有的 System.out.println("Study"); } } public class test { public static void main(String args[]) { Person p =new Student(); p.show(); p.study();//报错 } }
子类的引用就是父类,因此不需要特别声明。但父类想转为子类,则需要手动转换。如下代码:
class Person{ void show() { System.out.println("Person"); } } class Student extends Person{ void show() { System.out.println("Student"); } void study(){ System.out.println("Study"); } } public class test { public static void main(String args[]) { Person p =new Student(); p.show();//Student Student p1 = (Student) p;//强制将Person p转化为Student类 p1.study();//study } }
判断变量是否为所要求的类或其子类,使用关键词instanceof,如下代码:
class Person{ } class Student extends Person{ void student() { System.out.println("Student"); } } class Teacher extends Person{ void teacher(){ System.out.println("Teacher"); } } public class test { public static void main(String args[]) { Person p =new Student(); if(p instanceof Teacher) { Teacher p1 = (Teacher) p;//强制转换 p1.teacher(); }else { Student p1 = (Student) p;//强制转换 p1.student(); } /////////////输出:Student } }

浙公网安备 33010602011771号