对子类赋给父类的思考

2014-12-03

13:57:48

 1 /**
 2  * @author nlee
 3  * @version 1:09:38 PM Dec 3, 2014
 4  */
 5 package test;
 6
 7 public class T extends T1
 8 {
 9     int b;
10
11     public T(int s1)
12     {
13         super(s1);
14         b = 111;
15     }
16
17     public void fun2()
18     {
19         System.out.println("T===fun2");
20     }
21
22     public static void main(String[] args)
23     {
24         T t = new T(5);
25         t.fun1();
26         t.fun2();
27         System.out.println(t.b);
28         System.out.println(t.a);
29         T1 t1 = t;
30         t1.fun1();
31         t1.fun2();
32         System.out.println(t1.a);
33         // System.out.println(t1.b);
34     }
35 }
36
37 class T1
38 {
39     int a;
40
41     public T1(int s)
42     {
43         a = s;
44     }
45
46     public int get()
47     {
48         return a;
49     }
50
51     public void set(int d)
52     {
53         a = d;
54     }
55
56     public void fun1()
57     {
58         System.out.println("T1---fun1");
59     }
60
61     public void fun2()
62     {
63         System.out.println("T1---fun2");
64     }
65 }

33行被注释的代码

33         // System.out.println(t1.b);

若执行则会报错。

因为29行代码

29         T1 t1 = t;

将子类对象实例赋给父类对象,t1和t指向是同一内存块,但是t1不能访问子类的字段,因此t1不能访问变量b。

时间: 2024-11-13 12:39:55

对子类赋给父类的思考的相关文章

java中字段继承问题--子类不能继承父类的私有成员

public class Test1 { private int t1 = 1; public int getT1() { return t1; } public void setT1(int t1) { this.t1 = t1; } } 以上是Test1类,有个private的t1,值为1,给了get/set方法. public class Test2 extends Test1 { private int t1 = 2; public static void main(String[] a

构造函数的继承--子类不继承父类的构造函数,只能调用

关于子类对父类构造函数的继承: 子类必须调用父类的构造函数.默认情况下会自动调用父类的无参构造函数.如果父类没有无参构造函数,则必须显式的用super()调用一个构造函数. 创建对象时,先调用父类的构造函数对对象进行初始化, 然后再调用子类自己的构造函数 子类只继承(其实是默认调用)父类的默认(无参)构造函数,如果父类重写了自己的构造函数,就会导致父类没有无参构造函数,这样子类就不能从父类继承构造函数.

继承实现的原理、子类中调用父类的方法、封装

一.继承实现的原来 1.继承顺序 Python的类可以继承多个类.继承多个类的时候,其属性的寻找的方法有两种,分别是深度优先和广度优先. 如下的结构,新式类和经典类的属性查找顺序都一致.顺序为D--->A--->E--->B--->C. class E: def test(self): print('from E') class A(E): def test(self): print('from A') class B: def test(self): print('from B'

php 子类如何访问父类的静态方法

1.子类内部访问父类静态成员属性或方法,使用 parent::method()/self::method() 注意:$this->staticProperty(父类的静态属性不可以通过$this(子类实例)来访问,会有这样报错:PHP Strict Standards: Accessing static property Person::$country as non static in,PHP Notice: Undefined property: ) 2.子类外部 1.子类名::method

Java中子类继承了父类的私有属性及方法吗?

最近学习继承,从书中看到子类继承父类,子类拥有父类所有的属性和方法,于是使用程序去验证,发现父类的私有属性和私有方法,子类是不能访问的,当然一些父类的私有属性可能可以通过相应的方法访问到,但是私有的方法似乎不能简单的访问,这里暂不考虑Java反射机制,于是我分析,子类不能继承父类私有的属性及方法,但是分析了内存后,我发现我是错的,在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象.所以所谓的继承使子类拥有父类所有的属性和方法

c++与java中子类中调用父类成员的方法

1 java中: 2 import java.util.Scanner; 3 public class ClassTest{ 4 public static void main(String args[]){ 5 child ch=new child(2); 6 parent p=ch; 7 p.print(); 8 //p.print2();//调用错误,父类中没有改成员方法,该方法只属于子类! 9 } 10 } 11 12 class parent{ 13 int xx; 14 parent

Day17:继承实现的原理、子类中调用父类的方法、封装

一.继承实现的原来 1.继承顺序 Python的类可以继承多个类.继承多个类的时候,其属性的寻找的方法有两种,分别是深度优先和广度优先. 如下的结构,新式类和经典类的属性查找顺序都一致.顺序为D--->A--->E--->B--->C. class E: def test(self): print('from E') class A(E): def test(self): print('from A') class B: def test(self): print('from B'

Java中子类能继承父类的私有属性吗?

前段时间去听老师讲课的时候,老师告诉我子类是可以继承父类所有的属性和方法的.当时我是极其疑惑的,因为之前学校考试时这个考点我记得很清楚:子类只能继承父类的非私有属性和方法.老师给我的解释是这样的--先看下面一段代码 /** * 定义父类 * @author CBS */ public class Father { private String name;//私有属性 private char sex; public void tell(){ System.out.println(name+sex

Java多态 实例子类自动调用父类为空的构造方法 成员变量不支持Override 可写,没多态效果

=======子类 实例化的时候 默认调用父类为空的构造方法 即super();可省略. 但是当父类没有为空的构造方法的时候就必须在子类中       调用这个方法先实例父类 才能实例子类. 父类为空的构造方法 默认存在 在子类中默认自动调用. ========父类引用指向子类对象的时候  根据引用变量中 实例所属的类调用不同的类的方法,这种多态只适用于方法不适用与成员变量. 简单的理解为Java不支持属性字段覆盖(override),只支持方法覆盖,属性字段 不可重写. ========实例化