java纯继承与扩展

学习继承时,为了创建继承分级结构,看来最明显的方法是采取一种“纯粹”的手段。也就是说,只有在基础类或“接口”中已建立的方法才可在衍生类中被覆盖,如下面这张图所示:

可将其描述成一种纯粹的“属于”关系,因为一个类的接口已规定了它到底“是什么”或者“属于什么”。通过继承,可保证所有衍生类都只拥有基础类的接口。如果按上述示意图操作,衍生出来的类除了基础类的接口之外,也不会再拥有其他什么。
可将其想象成一种“纯替换”,因为衍生类对象可为基础类完美地替换掉。使用它们的时候,我们根本没必要知道与子类有关的任何额外信息。如下所示:

也就是说,基础类可接收我们发给衍生类的任何消息,因为两者拥有完全一致的接口。我们要做的全部事情就是从衍生上溯造型,而且永远不需要回过头来检查对象的准确类型是什么。所有细节都已通过多形性获得了完美的控制。
若按这种思路考虑问题,那么一个纯粹的“属于”关系似乎是唯一明智的设计方法,其他任何设计方法都会导致混乱不清的思路,而且在定义上存在很大的困难。但这种想法又属于另一个极端。经过细致的研究,我们发现扩展接口对于一些特定问题来说是特别有效的方案。可将其称为“类似于”关系,因为扩展后的衍生类“类似于”基础类——它们有相同的基础接口——但它增加了一些特性,要求用额外的方法加以实现。如下所示:

尽管这是一种有用和明智的做法(由具体的环境决定),但它也有一个缺点:衍生类中对接口扩展的那一部分不可在基础类中使用。所以一旦上溯造型,就不可再调用新方法:

若在此时不进行上溯造型,则不会出现此类问题。但在许多情况下,都需要重新核实对象的准确类型,使自己能访问那个类型的扩展方法。在后面的小节里,我们具体讲述了这是如何实现的。

时间: 2024-11-16 07:39:09

java纯继承与扩展的相关文章

Java多继承方法(名)冲突和成员内部类、局部内部类、静态内部类、匿名内部类

Java内部类     ①内部类是在一个java类体内,再定义一个类,即外部类的内部再定义一个类(相对的).      ②内部类分为四类:          成员内部类.局部内部类.静态内部类.匿名内部类      ③内部类作为外部类的一个成员,并依附于外部类而存在.包括:成员内部类.局部内部类.匿名内部类      ④内部类可以由private.public.protected.default访问修饰符和static修饰:      ⑤而外部类,即和public类平行的,只能有default修

java类的问题-java关于继承的构造器调用

问题描述 java关于继承的构造器调用 public class ConstructorDemo { public ConstructorDemo(){ System.out.println("父类的方法"); init(); } public void init(){ System.out.println("父类的init的方法"); } public static void main(String[] args){ new Big(); } } class Bi

浅谈Java 对于继承的初级理解_java

概念:继承,是指一个类的定义可以基于另外一个已存在的类,即子类继承父类,从而实现父类的代码的重用.两个类的关系:父类一般具有各个子类共性的特征,而子类可以增加一些更具个性的方法.类的继承具有传递性,即子类还可以继续派生子类,位于上层的类概念更加抽象,位于下层的类的概念更加具体. 1.定义子类: 语法格式 [修饰符] class 子类名 extends 父类名{ 子类体 } 修饰符:public private protected default 子类体是子类在继承父类的内容基础上添加的新的特有内

java-新人学习JAVA,关于继承的一个问题

问题描述 新人学习JAVA,关于继承的一个问题 老师布置了一个作业,具体要求如下: 先创建一个flight对象(这个对象只有一个属性,就是航班号) 然后根据用户的输入, 判断这个flight对象 是pflight(个人航班,有两个属性,分别是航班号和个人的名字,航班号继承之前创建flight对象的属性,需要用户个人的名字) 还是gflight(群体航班,分别是航班号和群里数量,航班号继承之前创建flight对象的属性,需要用户输入补充群体的数量), 请问该如何实现?(需要在一个单独的CLASS里

UWP开发入门(十)——通过继承来扩展ListView

原文:UWP开发入门(十)--通过继承来扩展ListView 本篇之所以起这样一个名字,是因为重点并非如何自定义控件,不涉及创建CustomControl和UserControl使用的Template和XAML概念.而是通过继承的方法来扩展一个现有的类,在继承的子类中增加属性和扩展行为. 我们在<UWP开发入门(七)--下拉刷新>中提到过嵌套ScrollViewer的实现思路,本篇我们对ListView的第一个扩展行为,即是摒弃嵌套的做法,而是通过访问ListView内部的ScrollView

Java纯连接Oracle10G出现异常

问题描述 Java纯连接Oracle10g数据库,连接代码如下:Class.forName("oracle.jdbc.driver.OracleDriver");String url="JDBC:ORACLE:thin:@127.0.0.1:1521:ORCL";Connection con=DriverManager.getConnection(url,"wangdgsc","wangdgsc");出现Io 异常: Conn

JAVA为何继承了defaultComboBoxModel类,不能访问源代码里的类变量呢?

问题描述 JAVA为何继承了defaultComboBoxModel类,不能访问源代码里的类变量呢? JAVA里,为何继承了defaultComboBoxModel类,不能访问源代码里的类变量呢? 解决方案 http://www.xue163.com/19990/160537/1605370605888852227.html 解决方案二: http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/javax/swing/De

java 可以继承几个类

问题描述 java 可以继承几个类 解决方案 只能继承一个类java不存在多继承的不是c++解决方案二:java 只支持单继承,一次只能继承一个类

Java多线程继承Thread类详解第1/2页_java

调用方法: /** * 点击量/月(年)Thread */ public void yearlyClickThread() { // 获取参数 String year = getPara("year"); // 统计数据集X List<String> xList = new ArrayList<String>(); xList.add("January"); xList.add("February"); xList.add