目录
一,抽象类
1.什么是抽象类
一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类
没有实际工作的方法, 我们可以把它设计成一个 抽象方法, 包含抽象方法的类我们称为 抽象类
2.抽象类语法
// 抽象类:被abstract修饰的类
public abstract class Shape {
// 抽象方法:被abstract修饰的方法,没有方法体
abstract public void draw();
abstract void calcArea();
// 抽象类也是类,也可以增加普通方法和属性
public double getArea(){
return area;
}
protected double area; // 面积
}
【注意】
1.抽象类不能直接实例化对象
2.抽象方法不能是private的(默认public)
3.抽象方法不能被final和static修饰,因为抽象方法要被子类重写
4.抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰
5.抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类
6.抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量
3.抽象类作用
相当于一层保险,防止子类的工作误被父类完成,类比final
二,接口
1.什么是接口
在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型
2.语法规则
格式与定义类时相同,但是需将class换为interface
public interface 接口名称{
抽象方法...
}
【注】
接口名称一般使用“形容词”,首字母大写,且无修饰符号
3.接口的使用
接口的使用要有一个类来实现(implements)该接口,实现接口中的所有抽象方法。
public class 类名称 implements 接口名称{
// ...
}
—— 空 ——后补代码
4.接口的特性
1. 接口类型是一种引用类型,但是不能直接new接口的对象(不能当类使用)
2. 接口中每一个方法都是public的abstract方法.
3. 接口不能用来实现方法,必须由类来实现
4.重写接口中方法时一定用public修饰
5.接口中的变量不变,默认public static final
6.接口中不能有静态代码块和构造方法
7.接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class
8.类需要完成接口中的所有方法(接口多继承后也要),否则也设为抽象类
9.接口之间可以多继承,类似于接口相插
interface IRunning {
void run();
}
interface ISwimming {
void swim();
}
// 两栖的动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {
}
//接口相接
class Frog implements IAmphibious {//也实现了一个类的多接口
...
}
10.一个类可以接多个接口
public interface A{
void a();
}
public interface B{
void b();
}
class C{
void c(){}
}
public class D extends C implements A,B{//一个类,多个接口
public void a(){}//实现接口中的所有方法
public void b(){}
public void c(){}//重写C类c方法
}
5.接口有什么用?
实现多态
而且这里有继承,有接口,继承就像是定义一个(is-a)具体的物体,而接口就是给这个物体加具体的描述(has-a)
例如:有一个animal父类,里面有name对象,eat()方法,被dog子类继承了,重写以后也都表示出来了,但这里为了让人们省心,就有了接口,可以不去关注具体类型(狗OR猫OR其他),而对某个对象再进行属性的添加
6.抽象类和接口的区别
核心区别:
抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写),
接口中不能包含普通方法, 子类必须重写所有的抽象方法.