class ClassOne{
private char var = 'a';
char getVar(){return var;}
}public class Beetle extends ClassOne {
private char var = 'b';
public static void main(String[] args) {
char a = new ClassOne().getVar();
System.out.println(a);
char b = new Beetle().getVar();
System.out.println(b);
}
}
输出为什么是a a 而不是a b啊??
private char var = 'a';
char getVar(){return var;}
}public class Beetle extends ClassOne {
private char var = 'b';
public static void main(String[] args) {
char a = new ClassOne().getVar();
System.out.println(a);
char b = new Beetle().getVar();
System.out.println(b);
}
}
输出为什么是a a 而不是a b啊??
解决方案 »
- ssl证书问题啊。。。。。。。。。。。keytool
- 求一个解决方案,可以是思路,最好是代码
- 如何模拟用户点击登陆网址
- java怎么录制jpanel上的屏幕,生成视频文件
- System.out.println("aaa 88888c".matches(".{3}\\b\\d{5}.")); 看看这个正则表达式问题在哪里?
- 告诉我几个能下载java源码的网站
- 大家帮忙看看,小弟写的一个简单地事件注册,侦听和处理的程序,调试没问题,出现的结果不对。。。
- 简单问题:如何获得一个文件的更新时间
- 处理文本框事件出错(付实例及错误提示)
- 请问jacob操作word表格,如何删除表格指定的行
- 数组边界溢出问题??
- 不知道这是什么问题,运行出错
或者使用interface
char getVar(){return var;}就好了。
所以我觉得应该是a b,但是我知道我是错的,但是不知道我上面的解释哪里错了。。
谢谢
看来我记错了啊...我原来记得private 成员是不能被子类继承的..呵呵..翻下书看看啊..
char a = new ClassOne().getVar();
System.out.println(a);
char b = new Beetle().getVar();
System.out.println(b);
因为getVar(); 是父类中的方法。调用该方法后得到此方法中的值
=================================
但是父类class ClassOne{
private char var = 'a';
char getVar(){return var;}
}
子类继承后我觉得应该是public class Beetle extends ClassOne{
private char var = 'b';
char getVar(){return var;}
}那么此时子类的getVar()不应该返回'b'么?
如果你想得到a b的結果,就需要在子類覆蓋父類中的方法
class Beetle其实继承了private char var = 'a';只不过由于Beetle类中有private char var = 'b';它被隐藏了.
===================================
你的这句话好象是错误的..
class Beetle其实继承了private char var = 'a';只不过由于Beetle类中有private char var = 'b';它被隐藏了.
===================================
错了....私有的变量和方法是不能被继承的.而不是你说的隐藏了.显然楼主没搞明白多态和动态绑定的概念和过程.
再对象调用方法时,他会首先查询符合传递参数的方法,列出一个方法表,然后再动态的绑定所指定的方法.也就是说他根据你所实例化的对象能自动的识别子类和父类的方法..
但是这里 LZ没有指定子类重写方法.虽然他继承到了方法.但是方法中所返回的变量是父类的,子类是不能调用父类的私有变量的,所以他自动的绑定到了父类的getVar方法上.这就是为什么只打印 a a了.
不知道这么解释对否....头脑里有这么概念,却不知道该怎么说..只能这么说了
。这种想法我觉得有问题私有的变量和方法都是会被继承的子类继承至父类的私有属性和方法,对于子类中的新增的属性和方法不可见,但是对继承来的父类的变量和方法还是可见的,就说char b = new Beetle().getVar(); System.out.println(b);实际上是调用继承至父类的getVar()来显示private char var = 'a'
又更层次的理解了继承的含义...谢谢cloud_ll()
错了....私有的变量和方法是不能被继承的.而不是你说的隐藏了.
。这种想法我觉得有问题私有的变量和方法都是会被继承的子类继承至父类的私有属性和方法,对于子类中的新增的属性和方法不可见,但是对继承来的父类的变量和方法还是可见的,就说char b = new Beetle().getVar(); System.out.println(b);实际上是调用继承至父类的getVar()来显示private char var = 'a'
私有的变量方法会继承吗?
输出为什么是a a 而不是a b啊??==========================其实这个例子很简单的.....继承中有一条...父类的私有方法不能被子类覆盖在JAVA虚拟机中,子类覆盖父类方法的前提是,子类必须能继承父类的特定方法.这里...父类的char方法是私有的..无法被继承..就谈不上覆盖了运行的时候getvar 是在父类中被定义..所以是执行父类的 char方法如果想得到 a b 的结果..你可以试着把父类的private 改成 pulic..这样方法被覆盖,才能执行子类实例中的char方法
public char getVar(){
return this.var;
}
返回本类中的var属性,才会出现a b
如果类Beetle 写一个 char getVar(){return var;}输出就是a b
public class Father{
private String secret = "Father secret.";
void tellSecret(){
System.out.println("this :"+this);
System.out.println(secret);
}
}
public class Son extends Father{
private String secret = "Son secret.";
public static void main(String[] args){
new Father().tellSecret();
new Son().tellSecret();
}
}
打印出来的结果说明,私有的是不与任何人共享的。