之前在类和对象中我们说到了类的普通特性,本篇将介绍类的一些高级特性。

一、抽象类

  抽象类:抽象类是只声明方法的存在而不去具体实现它的类。抽象类不能被实例化,也就是不能创建其对象。使用abstract关键字定义抽象类,直接上例子。

  下面是一个抽象类的定义,在class前直接加上abstract关键字。最后一句“public abstract void voice();”是一个抽象方法,没有实际意义,必须用子类重写。需要注意的是,抽象方法只有方法的声明,而没有方法的实现,与接口类似,但是用abstract关键字修饰的。对于抽象方法前的修饰,不能使用private或static关键字。

abstract class Animal {        // 定义抽象类
public String animal; // 定义颜色成员变量 public Animal() { // 定义构造方法
animal="bird";
} public abstract void voice(); // 定义抽象方法
}

  接下来实现一下抽象方法。方法是在抽象类的子类中通过重写该方法实现抽象方法。

public class Dog extends Animal {
@Override
public void voice() {
System.out.println("woof...");
}
} public class Cat extends Animal {
@Override
public void voice() {
System.out.println("nya...");
}
}

二、内部类

  内部类:在一个类中再定义一个类,就将在类中再定义的那个类称为内部类。分为成员内部类、局部内部类以及匿名内部类。比如下方代码就是成员内部类:

public class OuterClass {    // 外部类
private class InnerClass { // 内部类
//...
}
}

  在内部类中可以直接使用外部类的类成员。

  1. 局部内部类与成员内部类

  而局部内部类是指在类的方法中定义的内部类,作用范围为整个方法体。这里就不举例了,其实跟成员变量、局部变量是一个道理,区别在于作用范围而已。成员内部类同理。

  2. 匿名内部类

  匿名内部类大量使用于图形化编程的事件监控器代码中,可以大大简化代码增强可读性。顾名思义就是没有名称的类,可使用默认构造方法来生成匿名内部类的对象。在匿名内部类后需要加分号标识。比如后面在swing编程中,在编写框体时,对鼠标、键盘事件的引入就会用到匿名内部类,写到那里时再提及。

  3. 静态内部类

  静态内部类为在内部类前添加修饰符static。特点就是不可以使用外部类的非静态成员。

  4. 内部类的继承

  内部类也可以继承,比如继承ClassA类中的内部类ClassB,写作“extends ClassA.ClassB”。但必须硬性给予这个类一个带参数的构造方法,并且该构造方法的参数为需要继承内部类的外部类的引用,同时在构造方法体中使用a.super()语句,这样才为继承提供了必要的对象引用。下面看一个例子。

 public class Example extends ClassA.ClassB {    // 继承内部类ClassB
public Example(ClassA a) {
a.super();
}
}
class ClassA {
class ClassB {
}
}

  

  以上就是本篇的内容。

Java进阶篇(二)——抽象类、内部类的更多相关文章

  1. 【转】java提高篇(二)-----理解java的三大特性之继承

    [转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...

  2. WPF 4 DataGrid 控件(进阶篇二)

    原文:WPF 4 DataGrid 控件(进阶篇二)      上一篇<WPF 4 DataGrid 控件(进阶篇一)>中我们通过DataGridTemplateColumn 类自定义编辑 ...

  3. Java进阶篇(六)——Swing程序设计(上)

    Swing是GUI(图形用户界面)开发工具包,内容有很多,这里会分块编写,但在进阶篇中只编写Swing中的基本要素,包括容器.组件和布局等,更深入的内容会在高级篇中出现.想深入学习的朋友们可查阅有关资 ...

  4. Java进阶篇(一)——接口、继承与多态

    前几篇是Java的入门篇,主要是了解一下Java语言的相关知识,从本篇开始是Java的进阶篇,这部分内容可以帮助大家用Java开发一些小型应用程序,或者一些小游戏等等. 本篇的主题是接口.继承与多态, ...

  5. Java进阶篇(六)——Swing程序设计(下)

    三.布局管理器 Swing中,每个组件在容器中都有一个具体的位置和大小,在容器中摆放各自组件时很难判断其具体位置和大小,这里我们就要引入布局管理器了,它提供了基本的布局功能,可以有效的处理整个窗体的布 ...

  6. java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  7. (转)java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  8. Java面向对象进阶篇(抽象类和接口)

    一.抽象类 在某些情况下,父类知道其子类应该包含哪些方法,但是无法确定这些子类如何实现这些方法.这种有方法签名但是没有具体实现细节的方法就是抽象方法.有抽象方法的类只能被定义成抽象类,抽象方法和抽象类 ...

  9. Java多线程编程——进阶篇二

    一.线程的交互 a.线程交互的基础知识 线程交互知识点需要从java.lang.Object的类的三个方法来学习:    void notify()           唤醒在此对象监视器上等待的单个 ...

随机推荐

  1. 网络通信 --> Linux 五种IO模型

    Linux 五种IO模型 聊聊Linux 五种IO模型

  2. [Java反射机制]用反射改进简单工厂模式设计

    如果做开发的工作,工厂设计模式大概都已经深入人心了,比较常见的例子就是在代码中实现数据库操作类,考虑到后期可能会有数据库类型变换或者迁移,一般都会对一个数据库的操作类抽象出来一个接口,然后用工厂去获取 ...

  3. shell命令总结一

    简述:这篇总结是在360企业安全实习第一周学到的. Linux中的 2>&1 .if文件命令 .tr .$0等相关参数含义的用法 1. 2>&1 command>/d ...

  4. 关于css的text-indent首行缩进两个字符和图片缩进的问题

    段落前面空两个字的距离,不要再使用空格了.应该使用首行缩进text-indent. text-indent可以使得容器内首行缩进一定单位.比如中文段落一般每段前空两个汉字. <style typ ...

  5. Java终结方法的使用(终结守卫者)

    终结方法finalize()通常是不可预测的,也是很危险的,一般情况下是不必要的. Java语言规范并不保证finalize()会被及时执行,即不确定终结方法执行时间,只规定在对象被垃圾回收之前执行 ...

  6. 自定义ArrayList

    自定义实现ArrayList很简单,只需要明白下面几点 1.ArrayList 底层是由数组组成的 2.数组有容量限制,但是ArrayList并没有(实际上也有,Integer.MAX_VALUE). ...

  7. django的模板(二)

    模板(二) 实验简介 本节继续介绍模板的常用标签,for.if.ifequal和注释标签. 一.基本的模板标签和过滤器 1. 标签 if/else {% if %} 标签检查(evaluate)一个变 ...

  8. android使用sharesdk的小感

    1.sharesdk快捷方式,快捷方式集成了所有需要分享到的手机app,但是具有缺陷,举个例子(想要微信分享图片url,但是短信并不想带有图片,否则短信成彩信,这里集成的就有麻烦了,为了解决这种问题, ...

  9. 【iOS】字号问题

    一,ps和pt转换 px:相对长度单位.像素(Pixel).(PS字体) pt:绝对长度单位.点(Point).(iOS字体) 公式如下: pt=(px/96)*72. 二,字体间转换 1in = 2 ...

  10. RESTful三问

    我觉得学习一个技术,其实就是要弄明白三件事情:是什么(what),为什么(why),怎么用(how).正是所谓的三W方法. 所以打算总结一个"三问"系列.为了自己学习,也分享给别人 ...