目录
抽象:abstract
接口:
在JAVA中除了面向对象的三种特征,还有抽象类和接口
抽象:abstract
在JAVA里,用abstract class来定义抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
抽象方法:没有方法体
那么他存在的意义是什么?
根本意义:预定、自定义的规则
约定大于配置,配置大于编码
抽象类:
public abstract class t{}
那么abstract除了类还能修饰什么呢?
类,方法。
抽象方法必须在抽象类里,当我们定义了一个抽象类,这个抽象类中可以有哪些结构?
属性,成员方法,构造器,抽象方法,常量
抽象类中能不能没有抽象方法? 可以,抽象类里可以没有抽象方法,但是希望你没有抽象方法时,别用抽象类
抽象类是不能被实例化的,
抽象类不能创建对象
抽象类的构造器存在的意义: 为了约定子类的构造器必须和父类要匹配
一个类如果继承了一个抽象类,就必须重写这个抽象类所有的抽象方法
抽象方法能不能用private修饰?
不能,开发中,抽象方法基本上都是public.
抽象方法能不能用final修饰?
不能,用final修饰的方法不能被重写。
抽象类能不能用final修饰?
不能,用final修饰的类是不允许被继承的。
总结一下:
1.抽象方法必须是public或者protected(因为如果private,不能被子类继承,子类便无法实现该方法),默认情况下是不可以的,(默认情况其实就是public)。
2.抽象类不能被直接实例化,需要依靠子类采用向上转型的方式处理
3.抽象类必须有子类,要不然你一点意义都没有,使用extends继承,一个类只能继承一个抽象类。
4.子类(如果不是抽象类)则必须重写抽象类中的所有抽象方法 如果子类没有实现父类的抽象方法,必须将子类也定义为abstract.
示例:抽象类:
定义长宽高,定义体积,面积,周长的抽象方法:
public abstract class yuan {
private Integer chang;
private Integer kuan;
private Integer gao;
public abstract Double area(Double ... args);
//面积
public abstract Double volume(Double ... args);
//体积
public abstract Double perimeter(Double ... args);
//周长
public Integer getChang() {
return chang;
}
public void setChang(Integer chang) {
this.chang = chang;
}
public Integer getKuan() {
return kuan;
}
public void setKuan(Integer kuan) {
this.kuan = kuan;
}
public Integer getGao() {
return gao;
}
public void setGao(Integer gao) {
this.gao = gao;
}
}
继承的类:
!!!必须重写所有方法!!!
public class rectangle extends yuan{
@Override
public Double perimeter(Double ... args){
return null;
}
@Override
public Double area(Double ... args){
//面积
if(args.length>1){
throw new RuntimeException("只能传入一个参数");
}
return 3.14*args[0]*args[0];
}
@Override
public Double volume(Double ... args) {
return null;
}
}
接口:
接口是什么呢?
接口就是比抽象更抽象的东东。
接口是怎么使用的呢:
把class关键字替换成interface关键字
public interface test01{}
声明:
JDK1.7之前:接口中只能定义抽象方法,不能有属性,不能有方法,只能有抽象方法
(静态的常量)
JDK1.8及以后:接口中只能定义抽象方法,不能有属性,不能有方法,可以有默认方法和
静态方法,静态常量。
接口中结构的特点:
接口中的抽象方法,默认就是public abstract,我们推荐就省略了;
接口中的常量,默认就是public static final,我们也推荐省略。
说一句话:接口中的结构必须是public也只能是public
接口可以被实现:叫“实现类”
比如说A类 implement 接口,那我们就说A是这个接口的实现类
实现接口是可以多实现的,但是继承只能单继承
我们在开发中,一件事可以通过继承和实现接口来解决问题,优先使用接口解决问题。
由于JAVA单继承中的存在,我们在开发中,使用继承一定小心小心再小心
多态的前提:
继承,实现
重写方法
父类-->子类,接口-->实现类
在JAVA中只有单继承?
在JAVA中是存在多继承的,只能发生在接口之间。比如说新建了四个接口:ABCD,A可以继承BCD