1.方法的多态
1.1方法重载
重载再同一个类中
1.2方法重写
重写必须是继承下的子类重写父类的方法
2. 对象的多态
2.1向上转型
本质就是:父类的引用指向子类对象
语法格式:
父类 父类引用 = new 子类();
将子类的对象赋值给了父类的引用。小范围(子类) 转为大范围(父类)自动转
父类的引用可以调用父类的所有成员方法,可以调用子类的重写父类的方法,但是不能调用子类独有的方法。
2.2向下转型
语法格式:
父类类型 父类引用 = new 子类();
子类类型 子类引用 = (子类类型)父类的引用;向下转型
需要强转
为了避免方法写死,可以new object object 作为形参,
赋值的时候完成向上转型
object = "狗蛋“
object object = new String "狗蛋"
然后向下转型
String str = (String) object
3.instanceof关键字
比较操作符,返回值是布尔类型的数据 语法格式: ``` 对象引用 instanceof 运行类型 ``` 用来判断对象的运行类型(=右边), 是否是xx类型或者xx类型的子类 目的是为了在强转的时候不出现问题 package com.qfedu.e_instanceof; class AA {} class BB extends AA {} public class Demo1 { public static void main(String[] args) { BB bb = new BB(); BB bb1 = new BB(); AA aa = new AA(); //instanceof 的左边放的对象的引用,右边是类 System.out.println(bb instanceof BB);//true System.out.println(bb1 instanceof BB);//true //判断对象bb是否是AA的对象或者子类的对象 System.out.println(bb instanceof AA);//true System.out.println(aa instanceof AA);//true System.out.println(aa instanceof BB);//false //总结: 左边 的辈分小(对象的引用) 右边辈分大(类) 屡试不爽 AA aa2 = new BB(); System.out.println(aa2 instanceof AA);//true System.out.println(aa2 instanceof BB);//true // Object object = new Object(); System.out.println(object instanceof AA);//false System.out.println(object instanceof Object);//true String string = "qwer"; System.out.println(string instanceof Object);//true } }