继承中的变量和方法规则

编程是一种强逻辑的社交活动,建立在人与计算机之间。
高质量的因果关系(物理逻辑)对应着清晰的边界(权限范围),即分工。

最近在学习到了继承,遇到了几个有助于加深印象的点,贴出来自己的理解,往前辈指正补充。

案例分析

(1)多态中调用方法的选择
(父类引用指向子类对象-创建对象;父类引用接收子类对象-做参数)
多态情况下 编译看左面 运行看右面
首先,看父类是否能够保证编译的通过
①当父类没有声明这个方法时,编译不能通过;
②当父类声明此方法时,编译通过。
③再看右侧,对应的子类中是否对此方法进行重写;重写,则使用子类中重写的方法;没重写,则使用父类中的原始方法!

最常见的一种情况是:父类是抽象类,子类实现父类的抽象方法;
编译看左面:父类中含有此方法体,编译通过;
运行看右面:子类实现抽象方法,必定重写,所以运行子类重写之后的方法,即右面!

如果不是多态情况(子类引用指向子类对象)左右两面都是同一个类,所以编译与运行都是看子类,但也可以说成是编译看左面,运行看右面,因为左右都相等!

//思考实验题:
class A{
	public String show(D d){//D类的引用只能接收自己的对象--没有子类
		return ("A and D");
	}
	public String show(A a){//A类的引用能够接收A,B,C,D类的对象
		return ("A and A");
	}
}
class B extends A{
/*
	public String show(D d){//D类的引用只能接收自己的对象--没有子类
		return ("A and D");
	}
	此处隐藏了此方法,继承自A中
*/
	public String show(B b){//B类的引用能够接收B,C,D类的对象
		return ("B and B");
	}
	public String show(A a){//A类的引用能够接收A,B,C,D类的对象
		return ("B and A");//对A中的方法进行重写(复写)
	}
}
class C extends B{//继承B中的全部方法
}
class D extends B{//继承B中的全部方法
}
class DuoTaiTest{
	public static void main(String[] args){
		A a1=new A();
		A a2=new B();//父类引用指向子类对象
		B b=new B();
		C c=new C();
		D d=new D();
	    System.out.println(a1.show(b)/*父类引用能够接收子类对象*/);  //A and A 
	    System.out.println(a1.show(c));  //A and A 
	    System.out.println(a1.show(d));  //A and D 
	    System.out.println(a2.show(b));  //B and A
	    System.out.println(a2.show(c));  //B and A 
	    System.out.println(a2.show(d));  //A and D 
	    System.out.println(b.show(b));  //B and B 
	    System.out.println(b.show(c));  //B and B  
	    System.out.println(b.show(d));  //A and D 	
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值