一、多态
1.概述
多态:同一个事物个体的多种表现形态
比如:一个人在学校里的角色是学生,回到家里是父亲的儿子,爷爷的孙子,老婆的老公,一个人在不同场景下可以有不同的角色。
java中事物的个体就是类的对象,多态就是同一个对象的多种表现形式
java中对象的正常形态通过变量体现,比如:学生类的对象创建出来存到一个变量,变量依托数据类型
Student s = new Student();
java对象的多种形态通过变量的不同数据类型体现
存放一个对象的变量的数据类型可以不一样,但是不能随便写,有要求的。前提:要存在继承或者接口实现关系。
Teacher t = new Student();//不合法
Student 继承Person
Student s = new Student();
Person p = s;//合法
多态体现时的对象也不能是随意的一个对象,应该是子类的对象
接口下的多态
接口:PoliceDog
Dog类实现PoliceDog,相当于继承了这个接口
Dog d = new Dog();
PoliceDog pd = d;
父类或者接口类型的引用,指向子类或者实现类对象
而且多态的存在时合理的
特点:
父类的引用指向子类对象
父类引用:父类类型的变量
指向子类对象:父类类型的变量存放了子类对象的地址值
或
接口类型引用指向实现类对象
接口类型引用:接口类型的变量
指向实现类对象:接口类型的变量存放了实现类对象的地址值
格式:
父类名 变量【对象名】 = new 子类名(实参);
接口名 变量名 = new 实现类(实参);
只要出现上面的格式,就发生了多态
public class Person {
//Dog g = new Dog();
}
public class Student extends Person {
}
public class UseStudent {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s);
Person p = new Student();
System.out.println(p);
}
}
2.多态的弊端和好处
一旦产生多态,就相当于缩小了真实类型对象的访问范围,因为只能访问到父类中有的内容,或者是父子类中都出现的内容,子类独有的内容就访问不到了
好处:
增强了代码的扩展性,提升代码复用性
综合案例:
public interface USB {
void openIt();
void closeIt();
}
public class KeyBord implements USB{
@Override
public void openIt() {
System.out.println("打开键盘");
}
@Override
public void closeIt() {
System.out.println("关闭键盘");
}
public void use(){
System.out.println("打字");
}
}
public class Mouse implements USB {
@Override
public void openIt() {
System.out.println("打开鼠标");
}
@Override
public void closeIt() {
System.out.println("关闭鼠标");
}
public void use(){
System.out.println("点击");
}
}
public class NoteBook {
public void open(){
System.out.println("open");
}
public void close(){
System.out.println("close");
}
public void useUSBDriver(USB usb){
open();
usb.openIt();
usb.closeIt();
close();
}
}
public class Test {
public static void main(String[] args) {
NoteBook n = new NoteBook();
Mouse m = new Mouse();
n.useUSBDriver(m);
KeyBord k = new KeyBord();
n.useUSBDriver(k);
}
}