abstract 抽象类:
1、是一种模版模式抽象类为所有子类提供了一个通用模板,子类可以在这个模板基础上进行扩展。
2、通过抽象类可以避免子类设计的随意性。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。
修饰方法:方法变为抽象方法,抽象方法的意义就是为了让子类重写,没有方法体。
抽象类的定义:一个被abstract修饰的类就是抽象类。或者,包含一个抽象方法的类就是抽象类。(抽象类不一定会有抽象方法。)
Interface 接口:
1、接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现,规范和具体实现的分离。
2、接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…必须能”的思想。
3、接口的本质就是契约就像我们人间的法律一样。制定好后大家都遵守。
接口的相关规则:
1、接口中所有方法多是抽象类的。
2、即使没有显式的将接口用public表示,也是public访问类型的。
3、接口中变量默认用public static final标示,所以接口中定义的变量就是全局静态变量。
接口如何实现:1、子类用implements来实现接口中的规范。
2、接口不能创建实例,但是可用于声明引用变量类型。
3、一个实现了接口,必须实现接口中所有的方法并且这些方法只能是public。
abstract class Animal {
abstract void shout(); //抽象方法没有方法体!
}
class Dog extends Animal {
void shout() { //必须重写父类的抽象方法否则编译通不过
// TODO Auto-generated method stub
System.out.println("旺旺旺!");
}
}
内部类:将一个类定义置入另一个类定义中就叫做内部类。
特点:1、内部类作为外部类的成员,可以直接访问外部类的成员(包括private修饰的),反之则不行。
2、内部类作为外部类成员,可声明为private、默认、protected和public。
3、内部类成员只有在内部类的范围内是有效的。
4、用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。
匿名内部类:1、可以实现一个接口,或者继承一个父类。
2、只能实现一个接口。
3、匿名内部类要使用外部类的局部变量,必须使用final修饰该局部变量。
class Outer{
int outer_i = 100;
void test(){
Inner in = new Inner();
in.display();
System.out.println(in.a);
}
class Inner{
int a=5;
void display(){
System.out.println("display: outer_i = " + outer_i);
}
}
}
单例:一个类有且只能有一个对象。方法私有化构造方法,提供一个返回累的对象。
class Singleton{//饿汉模式
private static Singleton a=new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return a;
}
}