A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© liyudong 中级黑马   /  2016-11-13 23:15  /  1242 人查看  /  13 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文


1 class Father{
2    private int n = 100;
3    public int n2 = 200;
4
5    public void show() {
6        System.out.println(n);
7        System.out.println(n2);
8    }
9}
10 class Son extends Father {
11    public void function() {
12         System.out.println(n);   
13        System.out.println(n2);
14    }   
15    @Override
16     void show() {
17        System.out.println(n2);
18    }
19}
20 public class Test {
21    public static void main(String[] args) {
22        // 创建对象
23        Father f = new Son();
24        f.show();
25        f.function();
26    }
27 }


F 、 第23行 语句报错
G 、 第24行 访问不到show方法
H 、 第25行 父类中没有此方法,编译时期报错

13 个回复

倒序浏览
向上转型必须要有方法重写,而子类没有重写父类的function方法
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
说错了,父类对象只能掉用被重写的方法,而不能掉用子类特有的方法,需要向下转型,也是多态的弊端
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
要有覆盖,所以子类的show方法权限要大于父类的
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
只有这些错吗?我怎么看到第二行你的n私有化了,在12行子类中怎么打印?私有化成员变量只能在本类中进行调用
回复 使用道具 举报
function 是子类中特有的对象,你直接用父类的对象调用,当然找不到
回复 使用道具 举报
kakapc 中级黑马 2016-11-14 20:24:47
7#
1.子类重写父类方法 子类的访问权限必须大于等于父类的访问权限 // show() 方法无法重写
2.子类继承父类 只能访问父类非私有的属性与功能 //子类特有的function() 方法无法访问父类私有的属性 n
3.父类引用指向子类对象 必须向下转型才能调用子类特有的方法//(Son)f.function()
回复 使用道具 举报 1 0
peng84 中级黑马 2016-11-14 21:07:17
8#
楼上正解
回复 使用道具 举报
Father f = new Son();你怎么创建一个子类赋给一个父类?
回复 使用道具 举报
你私有了
回复 使用道具 举报
子类方法覆盖父类时,必须要保证子类权限大于等于父类,才可以覆盖,否则编译出错 访问权限修饰符:public>default>private,成员前面没加任何 访问权限修饰符为默认权限default
回复 使用道具 举报
看了所有的评论 感觉 kakapc 回答的很全面
补充一点   在类中,不写具体的修饰符,就是默认修饰符(default),它的权限低于 public
回复 使用道具 举报
子类的show方法改成public的
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马