饥人谷技术博客

面向对象:抽象类,接口,内部类

2020-11-20  本文已影响0人  _Jun

抽象类:


抽象类的概念:

Java中可以定义没有方法体的方法,方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类;

通常在编程语句中用 abstract 修饰的类是抽象类。抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

抽象类的特点:

1)抽象类和抽象方法必须用关键字abstract修饰
2)抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
3)抽象类不能实例化

语法格式:

修饰符 abstract 返回值类型 方法名([参数列表]);

[public] abstract class ClassName {
    //可以定义类所有的内容
    //可以定义接口中所有的内容
}

抽象类的声明:

语法:修饰符 abstract class 类名 extends 父类名
抽象类中可以没有抽象方法;但是一旦某个有抽象方法,那么这个类必须被声明为抽象类。

抽象类和普通类的主要区别:

1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
2)抽象类不能用来创建对象;
3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

接口:


接口(interface),在软件工程中,接口泛指供别人调用的方法或者函数。

语法:修饰符 interface 接口名{[常量];[抽象方法];}

[public] interface 接口名{
     //定义常量
     public static final 数据类型 常量名 = 值;
     //定义抽象方法
     public abstract 返回值类型  方法名(数据类型 参数名,...);
}

接口中抽象方法可以不写abstract关键字,访问修饰符默认public
接口中所有的方法不能有具体的实现,当类实现接口时,需要去实现接口中的所有抽象方法,否则需要将该类设置为抽象类;
接口中可以包含常量,默认public static final
接口也可以实现继承,并且可以继承多个父接口

抽象类和接口的相似:

1)不能实例化;
2)包含未实现的方法声明;
3)派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)。

抽象类和接口的区别:

1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
5)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。

内部类:


定义在其他类内部的类。

内部类可以分为:

1)成员内部类:

public class Outer {
    private int a = 1;
    //成员内部类
    class Inner{
        public void print(){
            //可以访问外部类的私有属性
            System.out.println(a);
        }
    }
}

创建内部类对象:先要创建外部类对象,然后使用外部类对象创建内部类对象

//创建外部类对象
Outer out = new Outer();
//创建内部类对象
Outer.Inner in = out.new Inner();
in.print();

2)静态内部类:

3)局部内部类:

4)匿名内部类:(属于局部内部的一种特殊情况)

使用内部类的意义:

1)增强封装,把内部类隐藏在外部类当中,不允许其他类访问这个内部类
2)增加了代码一个维护性
3)内部类可以直接访问外部类当中的成员

上一篇 下一篇

猜你喜欢

热点阅读