【零基础学Java】—多态(二十六)
一、多态的概述
- 面向对象的三大特性:封装性、继承性、多态性
extends
继承或者implements
实现,是多态性的前提
一个对象拥有多种形态,这就是对象的多态性
二、多态的格式与使用
代码当中体现多态性,其实就是一句话:父类引用指向子类对象
格式: 父类名称 对象名=new 子类名称();
或者: 接口名称 对象名=new 实现类名();
public class Fu {
public void method(){
System.out.println("父类方法");
}
public void methodFu(){
System.out.println(" 父类方法特有的");
}
}
public class Zi extends Fu {
@Override
public void method(){
System.out.println("子类方法");
}
}
public class demoMulti {
public static void main(String[] args) {
//使用多态的写法
//左侧父类的引用 指向了右侧子类的对象
Fu obj=new Zi();
obj.method();//子类方法
obj.methodFu();//父类方法特有的
}
}
三、多态中使用成员方法的特点
public class Fuu /*extends Object*/ {
int num=10;
public void showNum(){
System.out.println(num);
}
}
public class Zii extends Fuu{
int num=20;
int age=20;
@Override
public void showNum(){
System.out.println(num);
}
}
/**
* @author :CaiCai
* @date : 2022/4/10 17:03
*/
/*
访问成员变量的方式:
直接通过对象名访问成员变量,看等号的左边是谁,没有则向上找
间接通过成员方法访问成员变量,看该方法属于谁,优先使用谁,没有就向上找
*/
public class demoMultiFiled {
public static void main(String[] args) {
// 使用多态的写法: 左父右子
Fuu obj=new Zii();
System.out.println(obj.num);//10
//System.out.println(obj.age);//错误写法
// obj.showNum();//10 子类没有覆盖重写就是父::10
obj.showNum();//20 子类如果覆盖重写就是子:20
}
}
在多态的代码当中,成员方法的访问规则是:看new的是谁,就优先使用谁,没有则向上找
口诀:
成员变量:编译看左边,运行还看左边
成员方法:编译看左,运行看右
*/
public class Fuu /*extends Object*/ {
int num=10;
public void showNum(){
System.out.println(num);
}
public void method(){
System.out.println("父类方法");
}
public void methodFu(){
System.out.println("父类特有方法 ");
}
}
public class Zii extends Fuu{
int num=20;
int age=20;
@Override
public void showNum(){
System.out.println(num);
}
@Override
public void method(){
System.out.println("子类方法");
}
public void methodZii(){
System.out.println("子类特有方法");
}
}
/*
口诀:
成员变量:编译看左边,运行还看左边
成员方法:编译看左,运行看右
*/
public class demo02MultiFiled {
public static void main(String[] args) {
Fuu obj=new Zii();
obj.method();//子类方法(父子都有,优先使用子)
obj.methodFu();//父类特有方法(子类没有,父类有,向上找到父类)
}
}
四、使用多态的好处