java随手笔记三之多态
程序员文章站
2022-03-14 11:17:49
...
多态:
---一个对象的多种形态
实质:父类的引用指向子类对象
---前提:必须有继承或者是实现
class Animal{}
class Dog extends Animal{}
main{
Dog d = new Dog(); //本态
Animal dog = new Dog(); //多态
}
注意:通过多态形式创建的对象,只能访问子父类共有的成员方法,运行结果为子类结果是子类特有的成员方法不能方法。
虚拟方法调用:
父类对象调用子类特有的方法
Student S = new Student("张三",100);
Person p = new Student("李四",200);
System.out.println(S.say());
System.out.println(p.say());
多态数组 — 在引用类型的数组中,使用多态形式存放对象。
eg:Person[] person = {new Person("张三", 32),
new Student("李四", 21, 120, 90.0),
new Student("王五", 22, 119, 91.5),
new Teacher("刘老师", 35, 10, "Java EE"),
new Teacher("张老师", 11)};
多态参数 — 方法参数列表中的引用类型参数
instanceof运算符 — 判断一个对象是否为指定类型(形态)
强制类型转换 — 将对象从一种引用形态转换为另一种引用形态
对象关联:
一个对象中使用了另一个对象
一对一,一对多,多对一
class test4 { public static void main(String[] args){ Person p = new Person("王五",50); method(p); Student S = new Student("张三",100); method(S); Person p1 = new Student("赵四",100); method(p1); } public static void method(Person p){ if (p instanceof Student){ System.out.println("教师"); Student s = (Student)p; System.out.println("本态方法调用:"+p.say()); }else{ System.out.println("人"); } System.out.println(p.say()); } } class Person{ private String name; private int age; public Person(){} public Person(String name,int age){ this.name = name; this.age = age; } public String getName(){ return name; } public String say(){ return "姓名:"+name+"年龄:"+age; } } class Student extends Person{ private int id; private double score; public Student(String name,int id){ this(name,20,id,98.5); } public Student(String name,int age,int id,double score){ super(name,age); this.id = id; this.score = score; } public double getId(){ return id; } public String say(){ return super.say()+"学号:"+id+"分数:"+score; } }