您的位置:首页 > 其它

继承、方法覆盖、父子类属性引用相关问题

2014-11-29 21:59 323 查看
public class ExtendsDemo {

public static void main(String[] args) {

SubClass sub = new SubClass();

System.out.println("\n=================================\n");

SuperClass su = new SuperClass(99, 99);

}

}

/**

* 静态代码块—>非静态代码块—>初始化成员变量—>[父类的构造方法]—>构造方法

* 子类在调用父类构造方法时,整个过程中的this(Class实例)都是指向子类(包括父类的成员变量中的this)

*

* @author XuJinnan

*

*/

class SuperClass{

int a=1;

int b=1;

Foo foo = new Foo("SuperClass", this);

public SuperClass(int a,int b){

//this.b=b;

this.test();

//this.getClass()得到子类的Class实例,this.属性得到父类的属性

System.out.println("SuperClass Constructor's object:"+this.getClass().getSimpleName()+"\tthis.b:"+this.b);

}

public void test(){

System.out.println("SuperClass's test a:"+a+"\tSuperClass's test b:"+b);

}

}

class SubClass extends SuperClass{

int b=2;

private Foo foo = new Foo("SubClass", this);

public SubClass(){

super(4,5);

}

public void test(){

System.out.println("SubClass'test a:"+a+"\tSubClass'test b:"+b+"\t");

}

}

class Foo{

public Foo(String str, Object obj){

System.out.println(str+"类的Foo成员变量:this为"+obj.getClass().getSimpleName());

}

}

输出:

SuperClass类的Foo成员变量:this为SubClass

SubClass'test a:1 SubClass'test b:0

SuperClass Constructor's object:SubClass this.b:1

SubClass类的Foo成员变量:this为SubClass

=================================

SuperClass类的Foo成员变量:this为SuperClass

SuperClass's test a:1 SuperClass's test b:1

SuperClass Constructor's object:SuperClass this.b:1

实例2

public class Test {

public static void main(String[] args) {

Foos foo = new Bar();

foo.addFive();

System.out.println("foo Value: " + foo.a);

Bar bar = (Bar)foo;

System.out.println("bar Value: " + bar.a);

/*

* SubClass addFive() //调用的是子类的方法(父类方法被覆盖),子类的a属性值已变化

* foo Value: 3 //父类引用类型的实例,无法引用到子类的同名属性

* bar Value: 13 //强转后可以得到子类的属性引用,其值是一直存在于内存中的,就是说,堆中有两个a属性,一个是父类的,一个是子类的

*/

}

}

class Foos {

public int a;

public Foos() {

a = 3;

}

public void addFive() {

a += 5;

System.out.println("SuperClass addFive()");

}

}

class Bar extends Foos {

public int a;

public Bar() {

a = 8;

System.out.println("SubClass addFive()");

}

public void addFive() {

this.a += 5;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: