java多态中,父类属性的继承

曾经写过一篇关于动态绑定的,也就是关于java多态的,但是当子类属性,覆盖父类属性的时候,

是否依然可以调用子类的属性???


可惜答案是否定的!

直接上程序:

父类:

<span style="font-size:18px;">public class Animal {
	
public int m=1;
	public int sing(){
	return 2;
	}

}</span>
子类:

<span style="font-size:18px;">public class Mao extends Animal{
	
    public   int m=3;
	public int sing(){
		return 5;
		
	}

}
</span>

程序:

<span style="font-size:18px;">public static void main(String[] args) {
		Animal ani=new Mao();
		System.out.println(ani.sing()+"--------" +ani.m);
	}</span>

运行程序结果:

                                         5--------1

属性竟然是父类的,


原因如下:

             

      变量是静态绑定,
      方法是动态绑定。

因为

<span style="font-size:18px;">Animal ani=new Mao();</span>

就是把子类转型为父类

也就是多态的时候的特性;

子类转型为父类的规则:

  1. 只能调用父类的属性

  2. 只能调用被子类复写的方法,,(如果子类没有复写,则去父类查询,父类如果有,则调用)



    PS:以前我还真不知道,多态还隐藏这个属性的小问题,,

    记住,属性静态绑定;

    方法动态绑定,KO:




再加点,以后自己用:

子类覆盖父类要遵循“两同两小一大”

“两同”即方法名相同,形参列表相同

“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等

“一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等




Java多态并不强制要求父类的成员变量(包括公有、私有或受保护的)必须使用`private`修饰。多态主要涉及的是方法的覆盖(overriding)和隐藏(hiding),而不是对成员变量的访问控制。 当你创建一个子类并重写父类的方法时,子类的实例可以被视为父类的实例,这时就体现了多态性。即使父类的成员变量是`private`,只要通过子类的对象就能间接访问这些变量,因为子类可以通过公共方法暴露其内部状态。 在IntelliJ IDEA演示这一点: 1. 创建一个简单的类结构:一个父类`Person`有一个`private`属性`name`,以及一个公开的获取名字的方法`getName()`;子类`Student`继承自`Person`并重写了`getName()`方法。 ```java // Person.java class Person { private String name; public String getName() { return name; } } // Student.java class Student extends Person { @Override public String getName() { // 这里可以访问父类的private变量 return "Student's Name"; } } ``` 2. 在主程序,你可以这样操作: ```java // Main.java public class Main { public static void main(String[] args) { Person student = new Student(); // 子类对象赋值给父类变量 System.out.println(student.getName()); // 调用的是子类重写的getName() } } ``` 运行上述代码,虽然`student`是`Person`类型的引用,但实际上它引用的是`Student`实例,所以会打印"Student's Name",这就是多态的体现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值