继承、方法覆盖、父子类属性引用相关问题
来源:互联网 发布:数据机房综合布线 编辑:程序博客网 时间:2024/06/05 02:22
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());
}
}
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;
}
}
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;
}
}
0 0
- 继承、方法覆盖、父子类属性引用相关问题
- C++父子类继承时的隐藏、覆盖、重载
- 构造方法--父子继承
- 父子类异常覆盖
- java继承中的方法覆盖问题
- java151229Demo异常在父子类中的覆盖问题
- 类继承时方法覆盖问题。(static方法不能被”覆盖“)
- 类的继承,方法重载,方法覆盖
- hibernate继承关系父子类查询问题解析
- 继承、父子类、单继承、多继承
- java,属性覆盖,方法覆盖
- 继承的顺序,子类覆盖继承父类的方法
- 对象继承时重载方法的覆盖问题
- Python 父子类继承笔记
- Python学习(类的属性、继承、覆盖等详解)
- 类 对象 引用 属性 方法
- java中方法和变量在继承时的覆盖与引用
- Java继承中的方法覆盖
- hoj 1999 Data Manager
- POJ -- 1186 Stripies
- BestCoder Round #20
- matlab函数bsxfun的用法
- 构件技术与中间件
- 继承、方法覆盖、父子类属性引用相关问题
- 在Maven项目中使用Android Support Library
- JAVA基础 (五) 多线程
- ch5 JSP基础语法--page指令
- HDU 1754 I Hate It 【线段树 (单点替换 区间最值】
- linux GBSHM驱动调试笔记
- 回顾之前给公司的建议,及离开前想说的话
- android获取设备唯一标识解决方案
- 输入输出命令的邦定过程及数据发送