继承是所有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》是Bruce Eckel的经典编程教材,第三版(edition3)深入浅出地介绍了Java编程语言的核心概念和技术。这个压缩包文件包含了书中所提及的示例代码,名为"TIJcode",这对于理解和实践书中理论知识至...
4. **继承**:Java支持单继承,通过extends关键字,一个类可以继承另一个类的属性和方法,实现代码复用和类层次结构的构建。 5. **多态**:多态是面向对象的三大特性之一,允许同一种行为在不同类中有不同的表现...
《Thinking in Java》是Bruce Eckel的经典Java编程教材,第四版更是广受欢迎,深受程序员喜爱。这本书深入浅出地介绍了Java语言的核心概念和技术,包括面向对象编程、泛型、异常处理、多线程、网络编程等多个方面。...
《Thinking in Java》是Bruce Eckel的经典Java编程教材,第三版(3rd Edition)更是深受程序员喜爱。这本书深入浅出地介绍了Java语言的核心概念和技术,是学习Java编程的重要参考资料。以下将从标题、描述和标签中...
在 Java 中,继承使用关键字 `extends` 实现。例如,`class Animal extends Mammal`,这里 `Animal` 是子类,`Mammal` 是父类。 二、继承的编程习惯 在 Java 编程中,继承的编程习惯非常重要。以下是继承的编程...
《Thinking in Java》是Bruce Eckel的经典Java编程教材,它以其深入浅出的讲解和丰富的实践案例深受程序员喜爱。第四版是该书的最新修订版本,涵盖了Java语言的诸多核心概念和技术。本压缩包文件包含了该书练习题的...
《Thinking in Java》是Bruce Eckel的经典编程教材,它深入浅出地介绍了Java语言的核心概念和技术。这本书的第三版代码库包含了大量的示例程序,旨在帮助读者更好地理解和应用书中所讲解的知识点。以下是对这些代码...
《Thinking in Java》是Bruce Eckel的经典编程教材,特别是第三版,中文名为《Java编程思想》,深受广大Java程序员喜爱。这本书全面深入地介绍了Java语言,不仅涵盖了基础语法,还涉及了高级特性和设计模式,是学习...
《Thinking in Java》是Bruce Eckel的经典之作,深入浅出地介绍了Java编程语言。第二章主要探讨了对象和类的概念,这是面向对象编程的基础。在这一章中,习题设计的目标是帮助读者巩固对对象、类、封装、继承以及...
总的来说,《Thinking in Java》涵盖了Java语言的基础和高级特性,强调了面向对象设计的原则,如封装、继承和多态,以及如何通过接口和类组织代码。这本书对于希望深入理解Java编程思想和技术的开发者来说是一本...
- 在Java中,使用关键字`extends`来实现继承。 - 继承支持代码重用,简化了类的定义过程。 2. **封装**: - 封装是指将数据和操作这些数据的方法绑定在一起,同时隐藏类的内部实现细节。 - Java中的封装主要通过...
《Thinking in Java》是Bruce Eckel的经典Java编程教材,涵盖了从基础到高级的Java编程概念和技术。这本书分为多个版本,1-3版见证了Java语言的发展历程。以下将根据标题、描述和标签,详细阐述其中的知识点: 1. *...
对于初学者,推荐的参考书籍包括《Head First Java》、《Thinking in Java》等。Java和C++各有优缺点,Java更注重安全性、跨平台性和内存管理,而C++则提供更低级别的控制和更高的性能。 J2SE、J2EE和J2ME分别对应...
推荐的参考书籍有《Head First Java》、《Thinking in Java》等。 Java和C++都是面向对象的语言,但Java更注重安全性、跨平台性和内存管理,而C++则提供了更低级别的控制。J2SE是标准版,用于桌面应用;J2EE针对...
通过阅读《深入理解Java虚拟机》、《Thinking in Java》等经典书籍,以及参与实际项目实践,可以进一步提升对Java类的理解和应用能力。同时,工具的使用也是必不可少的,例如IDEA、Eclipse等Java集成开发环境,它们...
在Java编程中,`com.bruceeckel.simpletest`是一个经典的单元测试框架,由Bruce Eckel在他的《Thinking in Java》一书中引入。这个框架提供了一种简单的方式来测试Java代码,尤其适合初学者理解和实践单元测试。这个...
在阅读《Thinking in Java》等专业书籍或查看如iteye等在线技术论坛时,你会发现在源码分析和工具开发中,"super"关键字的应用无处不在。它可以帮助我们实现代码的复用,提高代码的可读性和可维护性,是理解和掌握...
使用类再生的两个方式:组合(new)和继承(extends),这个已经在 thinking in java中提到过. 设计模式之 Proxy(代理) 以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 设计模式之 Facade(门面?) 可扩展的使用...