多态在子父类中的成员上的体现的特点:

1,成员变量:在多态中,子父类成员变量同名。

    在编译时期:参考的是引用型变量所属的类中是否有调用的成员。(编译时不产生对象,只检查语法错误

    运行时期:也是参考引用型变量所属的类中是否有调用的成员。

    简单一句话:无论编译和运行,成员变量参考的都是引用变量所属的类中的成员变量。

    再说的更容易记忆一些:成员变量 ---编译运行都看 =左边。
  代码:

class Fu{
	int num=5;//成员变量
	void method1(){
		System.out.println("fu method_1");
	}
	void method2(){
		System.out.println("fu method_2");
	}
}
class Zi extends Fu{
	int num = 8;//成员变量
	void method1(){
		System.out.println("zi method_1");
	}
	void method3(){
		System.out.println("zi method_3");
	}
}
public class Test3 {

	public static void main(String[] args) {
		Fu f= new Zi();
		System.out.println(f.num);//5
		Zi z= new Zi();
		System.out.println(z.num);//8
	}
}

2,成员函数。

    编译时期:参考引用型变量所属的类中是否有调用的方法。

    运行事情:参考的是对象所属的类中是否有调用的方法。

    为什么是这样的呢?因为在子父类中,对于一模一样的成员函数,有一个特性:覆盖。

    简单一句:成员函数,编译看引用型变量所属的类,运行看对象所属的类。

    更简单:成员函数 ---编译看 =左边,运行看= 右边。   (Fu f = new Zi();)

                                                                                                               左边     右边

代码:

class Fu{
	void method1(){//成员函数
		System.out.println("fu method_1");
	}
	void method2(){//成员函数
		System.out.println("fu method_2");
	}
}
class Zi extends Fu{
	void method1(){//成员函数
		System.out.println("zi method_1");
	}
	void method3(){//成员函数
		System.out.println("zi method_3");
	}
}
public class Test3 {

	public static void main(String[] args) {
		Fu f= new Zi();
		f.method1();//zi method_1
		f.method2();//fu method_2
		Zi z= new Zi();
		z.method1();//zi method_1
		z.method2();//fu method_2
		z.method3();//zi method_3
	}
}

3,静态函数。                                                                                   

    编译时期:参考的是引用型变量所属的类中是否有调用的成员。

    运行时期:也是参考引用型变量所属的类中是否有调用的成员。

    为什么是这样的呢?因为静态方法,其实不所属于对象,而是所属于该方法所在的类。

    调用静态的方法引用是哪个类的引用调用的就是哪个类中的静态方法。

    简单说:静态函数 ---编译运行都看 =左边。

代码:

class Fu{
	void method1(){
		System.out.println("fu method_1");
	}
	void method2(){
		System.out.println("fu method_2");
	}
	static void method4(){//静态函数
		System.out.println("fu method_4");
	}
}
class Zi extends Fu{
	void method1(){
		System.out.println("zi method_1");
	}
	void method3(){
		System.out.println("zi method_3");
	}
	static void method4(){//静态函数
		System.out.println("zi method_4");
	}
}
public class Test3 {

	public static void main(String[] args) {
		Fu f= new Zi();
		f.method4();//fu method_4
		Zi z = new Zi();
		z.method4();//zi method_4
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值