`
jameswxx
  • 浏览: 776938 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java的继承与上溯

    博客分类:
  • java
阅读更多

整理了下代码,这样看的会更清楚了。如下;

Java代码

class Parent {
int i = 1;
String j = "Parent J";
StringBuffer k = new StringBuffer("Parent:");

public String getJ() {
return j;
}

public int getI() {
return i;
}

public void printBuffer() {
k.append("Parent Buffer;");
System.out.println(k);
}

static String getClassName() {
return "Parent";
}
}

class Child extends Parent {
int i = 2;
String j = "Child J";
StringBuffer k = new StringBuffer("Child:");

public String getJ() {
return j;
}

public int getI() {
return -i;
}

public void printBuffer() {
k.append("Child Buffer;");
System.out.println(k);
}

static String getClassName() {
return "Child";
}
} 

 




public class ExtendDemo {

public static void main(String[] args) {
Child child = new Child();
System.out.println("Child type test:");
System.out.println("child.i:" + child.i);
System.out.println("child.getI():" + child.getI());
System.out.println("child.j:" + child.j);
System.out.println("child.getJ():" + child.getJ());
child.printBuffer();
System.out.println("child.getClassName():" + child.getClassName());
System.out.println();

Parent parent = child;
System.out.println("Parent type test:");
System.out.println("parent.i:" + parent.i);
System.out.println("parent.getI():" + parent.getI());
System.out.println("parent.j:" + parent.j);
System.out.println("parent.getJ():" + parent.getJ());
parent.printBuffer();
System.out.println("parent.getClassName():" + parent.getClassName());
}

} 

 

运行结果如下:
Child type test:
child.i:2
child.getI():-2
child.j:Child J
child.getJ():Child J
Child:Child Buffer;
child.getClassName():Child

Parent type test:
parent.i:1
parent.getI():-2
parent.j:Parent J
parent.getJ():Child J
Child:Child Buffer;Child Buffer;
parent.getClassName():Parent

Child继承Parent,子类的变量和静态方法分别隐藏父类的变量和静态方法,子类的实例方法覆盖父类的实例方法。隐藏只是把父类的东东藏起来,但是其还是实质存在的;而覆盖就是把父类的东东完全抹掉以替换成子类的,是不可恢复的。在child被强制转换成Parent类型后,被隐藏的东西又被恢复了,而被覆盖的方法却是一去不复返了(子类的方法在这个实例里面永久替代了原先父类的方法)。这就是区别,也是这个题的考点所在了。


分享到:
评论

相关推荐

    java中的继承(子类调用父类构造方法还不懂).doc

    重写是类与类之间的关系,两者必须是继承关系。 2. 关键字 `super`:在 Java 类中使用 `super` 来引用父类的成分。`super` 可用于访问父类中定义的属性、调用父类中定义的成员方法、在子类构造方法中调用父类的构造...

    Java继承概念详细解读

    Java继承概念详细解读 Java继承概念是面向对象编程(Object-Oriented Programming,OOP)中的一种基本机制,它允许开发者基于已经存在的类构造一个新类。继承已经存在的类可以复用这些类的方法和域,在此基础上,...

    对Java的思考(Thinking in Java) Java入门 java与C++对比 深入浅出

    此外,讨论了选择合成还是继承的策略,protected的用法,以及递增开发和上溯造型的概念。 这本书是Java开发者的重要参考资料,它不仅适合初学者,也对有经验的程序员有所启发,因为它深入探讨了Java的高级主题,...

    Thinking in Java 中文第四版+习题答案

    1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 ...

    java 编程入门思考

    1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 ...

    Java初学者入门教学

    1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 ...

    java联想(中文)

    1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 ...

    JAVA_Thinking in Java

    1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 ...

    Thinking in java(中文)

    多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2 深入理解 7.2.1 方法调用的绑定 7.2.2 产生正确的行为 7.2.3 扩展性 7.3 覆盖与过载 7.4 抽象类和方法 7.5 接口 7.5.1 Java的“多重...

    Thinking in Java简体中文(全)

    1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 ...

    Java课程知识点1

    封装通过访问控制(如public、private等)实现,继承则使用extends关键字,Java支持单重继承。方法的重载是指方法名相同但参数列表不同的方法,而重写(覆盖)是指子类对父类方法的重新实现。 关键字this和super在...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 ...

    Thinking in Java_all

    章节还讨论了异常处理、多线程、永久性以及Java与互联网的结合,包括Web客户端和服务器端编程,以及Java在网络应用中的角色。 第二章“一切都是对象”深入探讨了Java中的对象和类。对象是通过句柄(引用)操作的,...

    Think in Java(中文版)chm格式

    1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 ...

    thinking in java

    多线程、永久性(持久化)以及Java与互联网的结合也是本章的重点,包括客户端和服务器端编程,以及如何利用Java进行Web开发。 第2章《一切都是对象》详细阐述了Java中的对象操作,如句柄、对象的创建和生命周期管理...

    Thinking_in_java中文第4版(Word完全版)

    第6章 "类再生"(即类的继承)详细阐述了合成和继承的语法,包括初始化基类、合成与继承的结合,以及何时选择合成而非继承。同时,讲解了protected关键字、递增开发和上溯造型的概念,最后提到了final关键字在数据和...

    Thinking_in_java中文第4版

    3. **合成与继承的结合**:比较合成与继承的不同之处,以及何时使用哪种方式。 4. **上溯造型**:解释上溯造型的概念,即子类对象可以被当作其父类的对象使用。 ##### 第7章 多形性 1. **动态绑定**:深入探讨多态...

Global site tag (gtag.js) - Google Analytics