Java 面向对象——多态(上)

多态

一、概述:

  • 某一个事物,在不同时刻表现出来的不同状态。多态是同一个行为具有多个不同表现形式或形态的能力。
  • 举例:水的不同状态(液体,固体,气态)。

多态是同一个行为具有多个不同表现形式或形态的能力。

多态性是对象多种表现形式的体现。例如:

  • 比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫、小狗、蜥蜴等等。那么我到宠物店说"请给我一只宠物",服务员给我小猫、小狗或者蜥蜴都可以,我们就说"宠物"这个对象就具备多态性。
  • 比如你是一个酒神,对酒情有独钟。某日回家发现桌上有几个杯子里面都装了白色的酒,从外面看我们是不可能知道这是些什么酒,只有喝了之后才能够猜出来是何种酒。你一喝,这是剑南春、再喝这是五粮液、再喝这是酒鬼酒….在这里我们可以描述成如下:

      酒 a = 剑南春

      酒 b = 五粮液

      酒 c = 酒鬼酒

      …

      这里所表现的的就是多态。剑南春、五粮液、酒鬼酒都是酒的子类,我们只是通过酒这一个父类就能够引用不同的子类,这就是多态——我们只有在运行的时候才会知道引用变量所指向的具体实例对象。

二、多态存在的三个必要条件(多态的前提)

  • 继承(有继承关系
  • 重写(方法重写)
  • 父类引用指向子类对象
class Fu {

	public void show() {
		System.out.println("show Fu");    //2.方法重写
	}		
}

class Zi extends Fu {    //1.继承关系
	public void show() {
		System.out.println("show Zi");
	}		
}

class DuoTaiDemo {
	public static void main(String[] args) {
		//父 f =  new 子();
		Fu f = new Zi();       3.要有父类引用指向子类对象
	}
}

 
  三、 多态中的成员访问特点:

 A:成员变量
            编译看左边,运行看左边。
B:构造方法
            创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
C:成员方法
            编译看左边,运行看右边。
D:静态方法
            编译看左边,运行看左边。
            (静态和类相关,算不上重写,所以,访问还是左边的)
用代码演示如下:

1、构造方法

创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。

class Fu {
        //构造方法
        public Fu(){}    //默认,可以不写

	public void show() {
		System.out.println("show Fu");    //2.方法重写
	}		
}

class Zi extends Fu {    //1.继承关系
	public void show() {
		System.out.println("show Zi");
	}		
}

class DuoTaiDemo {
	public static void main(String[] args) {
		//父 f =  new 子();
		Fu f = new Zi();       3.要有父类引用指向子类对象
	}
}

       
2、成员变量:编译看左边,运行看左边。

class Fu {
	public int num = 100;
	public void show() {
		System.out.println("show Fu");
	}
}

class Zi extends Fu {
	public int num = 1000;
	public int num2 = 200;

	public void show() {
		System.out.println("show Zi");
	}
}

class DuoTaiDemo {
	public static void main(String[] args) {
		Fu f = new Zi();
		//System.out.println(f.num);	//100
		System.out.println(f.num2);		//找不到符合
	}
}
DuoTaiDemo.java:21: 错误: 找不到符号
		System.out.println(f.num2);		//找不到符合
		                    ^
  符号:   变量 num2
  位置: 类型为Fu的变量 f
1 个错误

3、成员方法
            编译看左边,运行看右边。

class Fu {
	public int num = 100;
	public void show() {
		System.out.println("show Fu");
	}
}

class Zi extends Fu {
	public int num = 1000;
	public int num2 = 200;

	public void show() {
		System.out.println("show Zi");
	}
	
	public void method() {
		System.out.println("method zi");
	}
}

class DuoTaiDemo {
	public static void main(String[] args) {
		Fu f = new Zi();
		System.out.println(f.num);	//100
		
		//f.show();//show Zi
		f.method();// 找不到符号
	}
}
DuoTaiDemo.java:27: 错误: 找不到符号
		f.method();// 找不到符号
		 ^
  符号:   方法 method()
  位置: 类型为Fu的变量 f
1 个错误

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误如果有,再去调用子类的同名方法

由于成员方法存在方法重写,所以它运行看右边。

4、静态方法

编译看左边,运行看左边。 (静态和类相关,算不上重写,所以,访问还是左边的)

class Fu {
	public int num = 100;
	//静态方法
	public static void function() {
		System.out.println("function Fu");
	}
}

class Zi extends Fu {
	public int num = 1000;
	public int num2 = 200;
	//静态方法
	public static void function() {
		System.out.println("function Zi");
	}
}

class DuoTaiDemo {
	public static void main(String[] args) {
		Fu f = new Zi();
		System.out.println(f.num);	//100

		f.function();
	}
}
100
function Fu

 

多态(下):https://blog.csdn.net/hewenqing1/article/details/103556668

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值