`
yxwang0615
  • 浏览: 561317 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

thinking in java 4 extends 继承

    博客分类:
  • java
阅读更多
继承是所有OOP语言和java语言不可缺少的组成部分。当创建一个类时,总是在继承,因此,处非已明确指出要从其他类中继承,否则就是在隐式地从Java的标准根类Object进行继承。这样会得到基类中所有的域和方法。
eg:
//写一个父类
public class Cleanser {
	private String s = "Cleaner";
	public void append(String a){ s += a; }
    public void dilute(){ append(" dilute()"); }
    public void apply(){ append(" apply()"); }
    public void scrub(){ append(" scrub()"); }
    public String toString(){ return s; }
    
    //test
    public static void main(String[] args) {
		Cleanser x = new Cleanser();
		x.dilute(); x.apply(); x.scrub();
		System.out.println(x);
	}
}


//写一个子类继承上面的父类
public class Detergent extends Cleanser{
    
    //重写了父类的scrub()
    public void scrub()
    {
    	append("Detergent.scrub()");
    	super.scrub();//调用父类的方法用super(),区分重写的方法
    }
    public void foam()
    {
    	append("foam()");
    }
         //可以为每个类都创建main方法,这样使每个类的单元测试
          //都变得简单易行,完成单元测试后,也无需删除该main方法
	public static void main(String[] args) {
	         
                  Detergent x = new Detergent();
	        //子类可以继承父类的私有属性和方法,但不能访问或者使用.
                 //但可以通过继承过来的父类中的公共方法访问父类中继承过来的 
                 //私有属性,私有的属性和方法在子类中也存在一份,但是不可见的
                  x.dilute;
		x.apply();
		x.scrub();
		x.foam();
		System.out.println(x);
		System.out.println("Testing base class:");
		Cleanser.main(args);//调用父类的静态入口
	}/*Output:
           Cleaner dilute() apply()Detergent.scrub() scrub()foam()
           Testing base class:
           Cleaner dilute() apply() scrub()
           */

}


总结继承的几个特点:
1.子类继承父类,则继承了父类的所有方法和属性(包括私有的);
2.子类不能访问父类的私有字段,可以通过父类的公用方法去访问;
3.子类中调用父类的构造方法,必须在子类的构造方法且第一行关键字super()调用;

4.子类定义的方法,同父类中方法一致(方法名,参数类型和个数,返回值),则覆盖父类方法,如果在子类中要调用父类的方法,super.方法名()显式调用,否则默认是子类方法this.方法名();

5.子类中字段名称同父类字段一致,虽合法但应避免这种用法,以免混淆;
6.子类同父类之间相互转换,实际是子类引用同父类引用转换.

下面理解一下为什么子类可以继承父类的私有属性和方法:
父类中的private属性和方法,子类虽然继承了,但这些属性和方法对子类是隐藏的,其访问权限仍然只局限在父类的CLASS内部,无法在子类中访问和重写。

这就好比孩子和爸爸,他们各需要有隐私一样,如果爸爸不想让孩子知道自己的银行帐号的密码,就可以把它设置成private属性,这样孩子就无法知道了。不然的话,如果儿女们胡来,把钱都取跑了,爸爸喝西北风?

如果爸爸去世了,就可以把银行帐号的密码设置成public属性,这样孩子们就可以取出钱分了

所以继承不等同继承遗产,孩子不能无权限的继承爸爸的所有东东,爸爸活着,银行帐号的密码是private,爸爸去世了,银行帐号的密码才是public.
爸爸可以通过private和public限制继承者有那些权限

那你也许就会说儿子其实没有继承爸爸的private属性和方法, 这样冒似更有说服力 

但事实并非如此,这种继承的存在是事实.

否则的话,当儿子去调用爸爸的某个public方法,如果里边使用到某个private属性和方法,此时调用者是儿子而不是爸爸, 儿子如果没有继承爸爸的private属性和方法, 如何调用得到里边这个private属性和方法呢?此时,继承就体现出来了。


参考: thingking in java 4 ,感谢疯狂java联盟的annie
分享到:
评论

相关推荐

    Thinking in java edition3-code

    《Thinking in Java》是Bruce Eckel的经典编程教材,第三版(edition3)深入浅出地介绍了Java编程语言的核心概念和技术。这个压缩包文件包含了书中所提及的示例代码,名为"TIJcode",这对于理解和实践书中理论知识至...

    thinking in java 英文版

    4. **继承**:Java支持单继承,通过extends关键字,一个类可以继承另一个类的属性和方法,实现代码复用和类层次结构的构建。 5. **多态**:多态是面向对象的三大特性之一,允许同一种行为在不同类中有不同的表现...

    thinking in java edit4 答案

    《Thinking in Java》是Bruce Eckel的经典Java编程教材,第四版更是广受欢迎,深受程序员喜爱。这本书深入浅出地介绍了Java语言的核心概念和技术,包括面向对象编程、泛型、异常处理、多线程、网络编程等多个方面。...

    thinking in java 3rd

    《Thinking in Java》是Bruce Eckel的经典Java编程教材,第三版(3rd Edition)更是深受程序员喜爱。这本书深入浅出地介绍了Java语言的核心概念和技术,是学习Java编程的重要参考资料。以下将从标题、描述和标签中...

    thinking in java读书笔记(2)

    在 Java 中,继承使用关键字 `extends` 实现。例如,`class Animal extends Mammal`,这里 `Animal` 是子类,`Mammal` 是父类。 二、继承的编程习惯 在 Java 编程中,继承的编程习惯非常重要。以下是继承的编程...

    Thinking In Java 练习题答案 第四版

    《Thinking in Java》是Bruce Eckel的经典Java编程教材,它以其深入浅出的讲解和丰富的实践案例深受程序员喜爱。第四版是该书的最新修订版本,涵盖了Java语言的诸多核心概念和技术。本压缩包文件包含了该书练习题的...

    Thinking in Java 第三版代码

    《Thinking in Java》是Bruce Eckel的经典编程教材,它深入浅出地介绍了Java语言的核心概念和技术。这本书的第三版代码库包含了大量的示例程序,旨在帮助读者更好地理解和应用书中所讲解的知识点。以下是对这些代码...

    Thinking.In.Java.3rd.Edition.Chinese

    《Thinking in Java》是Bruce Eckel的经典编程教材,特别是第三版,中文名为《Java编程思想》,深受广大Java程序员喜爱。这本书全面深入地介绍了Java语言,不仅涵盖了基础语法,还涉及了高级特性和设计模式,是学习...

    ThinkingInJava第二章习题答案

    《Thinking in Java》是Bruce Eckel的经典之作,深入浅出地介绍了Java编程语言。第二章主要探讨了对象和类的概念,这是面向对象编程的基础。在这一章中,习题设计的目标是帮助读者巩固对对象、类、封装、继承以及...

    Tinking in Java

    总的来说,《Thinking in Java》涵盖了Java语言的基础和高级特性,强调了面向对象设计的原则,如封装、继承和多态,以及如何通过接口和类组织代码。这本书对于希望深入理解Java编程思想和技术的开发者来说是一本...

    Java设计 Java思想

    - 在Java中,使用关键字`extends`来实现继承。 - 继承支持代码重用,简化了类的定义过程。 2. **封装**: - 封装是指将数据和操作这些数据的方法绑定在一起,同时隐藏类的内部实现细节。 - Java中的封装主要通过...

    Tinking in java(1-3版)PDF

    《Thinking in Java》是Bruce Eckel的经典Java编程教材,涵盖了从基础到高级的Java编程概念和技术。这本书分为多个版本,1-3版见证了Java语言的发展历程。以下将根据标题、描述和标签,详细阐述其中的知识点: 1. *...

    CoreJava 新手必

    对于初学者,推荐的参考书籍包括《Head First Java》、《Thinking in Java》等。Java和C++各有优缺点,Java更注重安全性、跨平台性和内存管理,而C++则提供更低级别的控制和更高的性能。 J2SE、J2EE和J2ME分别对应...

    Java经典问答

    推荐的参考书籍有《Head First Java》、《Thinking in Java》等。 Java和C++都是面向对象的语言,但Java更注重安全性、跨平台性和内存管理,而C++则提供了更低级别的控制。J2SE是标准版,用于桌面应用;J2EE针对...

    JAVA 类

    通过阅读《深入理解Java虚拟机》、《Thinking in Java》等经典书籍,以及参与实际项目实践,可以进一步提升对Java类的理解和应用能力。同时,工具的使用也是必不可少的,例如IDEA、Eclipse等Java集成开发环境,它们...

    编译好的com.bruceeckel.simpletest类文件

    在Java编程中,`com.bruceeckel.simpletest`是一个经典的单元测试框架,由Bruce Eckel在他的《Thinking in Java》一书中引入。这个框架提供了一种简单的方式来测试Java代码,尤其适合初学者理解和实践单元测试。这个...

    Super关键字的几点应用

    在阅读《Thinking in Java》等专业书籍或查看如iteye等在线技术论坛时,你会发现在源码分析和工具开发中,"super"关键字的应用无处不在。它可以帮助我们实现代码的复用,提高代码的可读性和可维护性,是理解和掌握...

    二十三种设计模式【PDF版】

    使用类再生的两个方式:组合(new)和继承(extends),这个已经在 thinking in java中提到过. 设计模式之 Proxy(代理) 以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 设计模式之 Facade(门面?) 可扩展的使用...

Global site tag (gtag.js) - Google Analytics