1.抽象类的认识
在继承的层次结构中,每个新的子类都使得类变得更加明确与具体。如果从一个子类向父类追溯,类就会变得更加通用,更加的不明确。类的设计应该确保父类包含他的子类的共同特征。有时候,一个父类设计的非常抽象,以至于他都没有具体的实例,这样的类称为抽象类。例如:
public abstract class CLass{
abstract void fun();
}
这就是一个抽象类的定义,在普通的类的定义上有些不同,因为在ClassName之前有了关键字abstract代表抽象类(必须要用abstract来修饰),而其中的 abstract void fun(); 则是抽象类中的抽象方法。
抽象类的几个特点:
1.他和常规类很像,但是不能用new操作符创建他的实例。抽象方法只有定义而没有实现。它的实现由子类提供。一个包含抽象方法的类必须声明为抽象类
2.抽象类的构造方法定义为protected,因为他只被子类使用,创建一个具体子类的时候,父类的构造方法被调用以初始化父类中定义的数据域
代码例子(来源于书本)
public abstract class geometricobject {
private String color ="white";
private boolean filled;
private java.util.Date dateCreated;
public geometricobject() {
dateCreated=new java.util.Date();
}
public geometricobject(String color,boolean filled) {
dateCreated = new java.util.Date();
this.color=color;
this.filled=filled;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color=color;
}
public boolean ifFilled() {
return filled;
}
public void setFilled(boolean filled) {
this.filled=filled;
}
public java.util.Date getDateCreated(){
return dateCreated;
}
public String toString() {
return"created on"+dateCreated+"\ncolor"+color+"and filled: "+filled;
}
public abstract double getArea();
public abstract double getPerimeter();
}
在这其中就将geometricobject定义为一个抽象类,代表不同的几何图形类型汇总,其中的getArea和getPerimeter是其中的两个方法,因为在不同的几何图形中他们的方法作用不同,所以将他们也定义为抽象方法。
2.接口
接口和类十分的相似,但是他的目的是指明相关或者不相关类的对象的共同行为,在Java中采取其他的方式来定义接口
public interface name{
//
}
在Java中接口被看做是一个特殊的类。就像常规类一样,每个接口都被编译为独立的字节码文件。使用接口或多或少都有点像使用抽象类。类和接口之间的关系被称为接口继承,使用implements关键字来继承
class c1 extends c2 implements c3{
//
}
就是代表一个c1的类继承了c2并且c1这个类又实现了与c3的接口
同时Java 8 中还允许接口存在公有的静态方法。接口中的公有静态方法和类中的公有静态方法一样使用。下面是一个在接口中定义默认方法和静态方法的实例:
public interface A{
public default void dosomething() {
System.out.println("...");
}
public static int getValue() {
return 0;
}
}
3.接口与抽象类
Java只允许为类的继承做单一继承,但是允许使用接口做多重继承,例如:
public class clas extends basic implements In1,In2,...,Inn{
//
}
其实接口和抽象类最大的区别就是抽象类对的是一个对象,而接口则是一个行为,例如人是一个大类,其中包含了男人和女人,而接口则是指的是其中的行为,比如人干什么事,吃什么饭,能吃那就能实现这个接口,不能就不能实现这个接口。