抽象类:
抽象类的概念:
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)动态外部类:
- 动态外部类是在内部类后面加上 static
- 动态外部类不须要创立内部对象
- 只能拜访外部类动态的属性或办法
-
拜访动态外部类当中的动态成员:Outter.Inner.color
例:public class Outer { private int a = 1; private static int b = 2; // 动态外部类 class static class Inner{public void print(){ // 只能拜访动态属性 System.out.println(b); } } }
3)部分外部类:
- 部分外部类只能定义在办法当中应用
- 部分外部类当中是不能蕴含动态变量
-
部分外部类当中能够蕴含局部变量,应用的局部变量的实质是 final 变量
例:public class Outer { private int a = 1; private void print(final int b){ // 部分外部类 class Inner{public void print(){System.out.println(a); System.out.println(b); } } } }
4)匿名外部类:(属于部分外部的一种非凡状况)
- 匿名外部类不晓得类名,所以不能定义构造方法,只能应用默认无参的构造方法。
- 只应用一次的时候,就应用匿名外部类
- 匿名外部类必须晓得它的父类或实现的接口
应用外部类的意义:
1)加强封装,把外部类暗藏在外部类当中,不容许其余类拜访这个外部类
2)减少了代码一个维护性
3)外部类能够间接拜访外部类当中的成员