私有属性的问题

私有属性的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class Animal {
    private String name;
    //无参构造方法
    public Animal() {
         
    }
     
    //多参构造方法
    public Animal(String name) {
        this.setName(name);
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
     
}
 
============================================================
public class Cat extends Animal {
    private int month;
 
    // 无参构造方法
    public Cat() {
 
    }
 
    // 多参构造方法
    public Cat(String name, int month) {
        this.setName(name);
        this.setMonth(month);
    }
     
     
 
    public int getMonth() {
        return month;
    }
 
    public void setMonth(int month) {
        this.month = month;
    }
 
}
===========================================================
public class Test {
 
    public static void main(String[] args) {
        Cat cat=new Cat("小花",2);
        System.out.println("它叫" + cat.getName());
 
    }
 
}

老师之前说,父类的私有属性不能够被继承,但是cat对象为什么可以输出名字呢?它没有name这个属性

但是为什么可以输出呢?我觉得很困扰,我想知道不能够继承是什么意思,是单纯的不能够调用,还是什么意思,请老师解答一下

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学,你好!关于属性的继承问题,Java中是这么设计的,同学可以当做是一种语法去记忆。虽然不能继承父类私有属性,但是当return name时,确实可以获取子类对象的name属性。

http://img1.sycdn.imooc.com//climg/5d3596660001b9b206280099.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

吃吃吃鱼的猫 2019-07-22 17:25:06

同学你好,子类能够继承父类的属性和方法,但不能继承父类中private修饰的属性和方法。


这里能够输出的原因是:


在Test类中调用Cat的带参构造方法。

http://img1.sycdn.imooc.com//climg/5d357fc50001531404350119.jpg


在Cat的带参构造方法中,调用this.setName(),this.setMonth()方法。

显而易见,Cat类中是没有setName方法的。

http://img1.sycdn.imooc.com//climg/5d357f6e000133ed05060565.jpg


但是它继承了Animal类,我们来到Animal类中。

http://img1.sycdn.imooc.com//climg/5d357f950001076304930477.jpg

发现setName()方法是由public修饰的,所以它能够被子类继承,在Cat方法可以使用this.setName()为属性name赋值。


最后,Animal类中的getName()方法同样是public所修饰,能够被Cat继承,所以在main方法中创建Cat对象后,可以通过Cat对象调用getName()方法获取name的值。

http://img1.sycdn.imooc.com//climg/5d35803f0001b4df04630115.jpg

 

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 慕桂英爱吃大米 #1
    还是有一点不明白,好像是有一个坎一样在cat.getName这个地方, cat对象虽然继承了getName方法,getName方法内部是return name 不过我很好奇,既然cat类中没有name属性,它怎么return呢? return的是父类对象中的那么属性吗?
    2019-07-22 18:06:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码