1.方法的多态:方法的重写和重载就是多态的表现形式。
例如:
package com.xcl_static;
class Monkey{
public void eat() {
System.out.println("吃饭!");
}
}
class Person extends Monkey{
@Override
public void eat() {
System.out.println("吃大盘鸡拌面!");
}
}
public class Demo6 {
public static void main(String[] args) {
Person person = new Person();
person.eat();
}
}
2.对象的多态:父类的引用指向子类的对象。
例如:
package com.xcl_static;
class Person1{
public void eat(){
System.out.println("吃饭");
}
}
class Adult extends Person1{
@Override
public void eat() {//方法重写
System.out.println("吃大盘鸡拌面!");
}
}
public class Demo7 {
public static void main(String[] args) {
Person1 person = new Adult();
person.eat();
}
}
3.多态的转型
3.1向上转型:父类的引用指向子类的对象
语法格式:父类类型 变量 = new 子类类型;
目的:父类可以直接调用子类共同的方法。
package com.xcl_static;
class Person1{
public void eat(){
System.out.println("吃饭");
}
}
class Adult extends Person1{
@Override
public void eat() {//方法重写
System.out.println("吃大盘鸡拌面!");
}
}
public class Demo7 {
public static void main(String[] args) {
Person1 person = new Adult();
person.eat();
}
}
3.2向下转型(强制转型):子类的引用
语法格式:子类类型 变量 = (子类类型)父类类型
目的:是为了调用子类独有的方法。
注意:在向下转型前应该先向上转型才可以不报错。
package com.xcl_static;
class Person1{
public void eat(){
System.out.println("吃饭");
}
}
class Adult extends Person1{
@Override
public void eat() {
System.out.println("吃大盘鸡拌面!");
}
public void play() {
System.out.println("玩手机!");
}
}
public class Demo7 {
public static void main(String[] args) {
Person1 person1 = new Adult();
Adult adult =(Adult)person1;
adult.play();
}
}
4.instanceof关键字
instanceof:该关键字为比较操作符,返回值是一个Boolean类型的数据。
语法格式:
对象的引用 interface 运行类型
通俗来讲:interface左边的的范围<=右边的范围。
目的:是为了让强转的类型避免异常。
例如:
package com.xcl_static;
class AAA{
}
class BBB extends AAA{
}
public class Demo8 {
public static void main(String[] args) {
AAA aaa = new AAA();
BBB bbb = new BBB();
System.out.println(bbb instanceof AAA);
System.out.println(aaa instanceof AAA);
}
}