黑马程序员技术交流社区
标题:
三段代码输出什么?为什么
[打印本页]
作者:
马林康
时间:
2012-6-21 17:57
标题:
三段代码输出什么?为什么
本帖最后由 马林康 于 2012-6-22 11:53 编辑
1.
class A {
public int i = 10;
}
class B extends A{
public int i = 20;
}
public class TestPolm{
public static void main(String args[]){
B b = new B();
A a = b;
System.out.println(b.i);
System.out.println(a.i);
}
}
复制代码
2
class A {
private int i = 10;
public void printI(){
System.out.println(i);
}
}
class B extends A{
private int i = 20;
}
public class TestPolm{
public static void main(String args[]){
B b = new B();
A a = b;
b.printI();
a.printI();
}
}
复制代码
3
class A {
private int i = 10;
public void printI(){
System.out.println(i);
}
}
class B extends A{
private int i = 20;
public void printI(){
System.out.println(i);
}
}
public class TestPolm{
public static void main(String args[]){
B b = new B();
A a = b;
b.printI();
a.printI();
}
}
复制代码
我要的不是运行结果 ,我要的是解释
作者:
燃烧端午
时间:
2012-6-21 18:34
子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量
在Java中重写指的是方法的重写,而不是属性的重写;
希望能帮上你
作者:
邓杰
时间:
2012-6-21 19:03
class A {
public int i = 10;
}
class B extends A{
public int i = 20;
}
public class TestPolm{
public static void main(String args[]){
B b = new B();
A a = b;
System.out.println(b.i);
System.out.println(a.i);
}
}
-----------------------------------------------------------------------------------------
class A {
private int i = 10;
public void printI(){
System.out.println(i);
}
}
class B extends A{
private int i = 20;
}
public class TestPolm{
public static void main(String args[]){
B b = new B();
A a = b;
b.printI();//10 原因:System.out.println(i);等同于System.out.println(this.i);
a.printI();//10 this是隐式的。在毕老师的this关键有讲,如果你不写JVM会帮你加上的;
}
}
------------------------------------------------------------------------------------------------------------------------------
class A {
private int i=10;
//public int i = 10;
public void printI(){
System.out.println(i);
}
}
class B extends A{
public int i = 20;
//private int i=20;
public void printI(){
System.out.println(i);
}
}
public class TestPolm{
public static void main(String args[]){
B b = new B();
A a = b;
b.printI();//20 原因;System.out.println(i)等同于System.out.println(this.i)
a.printI();//20 注意成员变量不能被覆盖;你可以把int i改成public 验证:
//然后把B类的输出语句改成;System.out.println(super.i)表示打印父类的成员变量的
//值;当然父类和子类成员改变不同的时候就没有这个必要直接写变量名就是了;
}
}
作者:
邓杰
时间:
2012-6-21 19:06
不好意思第一个原因没有复制上:System.out.println(b.i);//20 原因成员变量不能被继承;谁的引用就能调用谁的成员变量;
一句话这几段代码主要 考的是this关键字的应用;
作者:
孙浩
时间:
2012-6-21 19:12
本帖最后由 孙浩 于 2012-6-21 23:54 编辑
在多态中,
成员变量
的特点:无论编译和运行都参考左边(引用型变量所属的类)
在多态中,
成员函数
的特点:编译看左边,运行参考右边
静态成员函数
的特点:无论编译和运行都参考左边
1.
class A {
public int i = 10;
}
class B extends A{
public int i = 20;
}
public class TestPolm{
public static void main(String args[]){
B b = new B();
A a = b;//多态,声明父类创建子类。
System.out.println(b.i);
System.out.println(a.i);//
在多态中,
成员变量
的特点:无论编译和运行都参考左边(引用型变量所属的类) 所以 a.i = 10
}
}
2.3.参考:
在多态中,
成员变量
的特点:无论编译和运行都参考左边(引用型变量所属的类)
在多态中,
成员函数
的特点:编译看左边,运行参考右边
静态成员函数
的特点:无论编译和运行都参考左边
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2