博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java进阶篇(二)——抽象类、内部类
阅读量:6950 次
发布时间:2019-06-27

本文共 1678 字,大约阅读时间需要 5 分钟。

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

一、抽象类

  抽象类:抽象类是只声明方法的存在而不去具体实现它的类。抽象类不能被实例化,也就是不能创建其对象。使用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()语句,这样才为继承提供了必要的对象引用。下面看一个例子。

1 public class Example extends ClassA.ClassB {    // 继承内部类ClassB2     public Example(ClassA a) {3         a.super();4     }5 }6 class ClassA {7     class ClassB {8     }9 }

  

  以上就是本篇的内容。

转载于:https://www.cnblogs.com/adamjwh/p/8366196.html

你可能感兴趣的文章
Mac Brew Uninstall MySql
查看>>
LeetCode刷题笔记-回溯法-分割回文串
查看>>
Serv-U和win2003防火墙的设置
查看>>
【网摘】ActiveX组件及其注册
查看>>
Bootstrap网格系统(Grid System)
查看>>
linux内核参数优化
查看>>
Utils工具方法集插件详解
查看>>
Windows Server定时执行bat
查看>>
Linux RTC Test Example rtctest.c hacking
查看>>
Linux C enum
查看>>
递增三元数组——第九届蓝桥杯C语言B组(省赛)第六题
查看>>
字符,字节和编码, ASCII码, DBCS码,SBCS码 与Unicode码
查看>>
物件捆绑 背包问题 动态规划 求解
查看>>
finish
查看>>
查看系统信息msinfo32工具的使用
查看>>
iso系统镜像刻录到光盘和U盘
查看>>
tcp四次挥手
查看>>
windows服务初识
查看>>
jqgrid 点击列头的超链接或按钮时,不触发列排序事件
查看>>
自定义Collection类
查看>>