抽象类Abstract
抽象类
形状类:三角形 圆形 矩形
父类的方法必须要存在,因为我们多态的必要条件是必须存在方法重写
方法的实现毫无意义
提供一个方法的声明即可,不需要实现,就是抽象方法
抽象类的特点:
1.抽象方法和抽象类使用 abstract 修饰
2.有一个抽象方法的类必须是抽象类
3.抽象类中一定有抽象方法吗? --> 不一定
4.没有抽象方法的抽象类有意义吗? --> 有意义,防止外界创建对象
防止外界实例的方式:
a.构造方法私有
b.抽象类
c.接口
d.内部类
5.抽象类不能够实例化 – 利用多态
6.抽象类的子类的特点:
a.如果子类想要继承抽象类,就必须实现抽象类中所有的抽象方法
b.如果子类不想实现父类的抽象方法,那么子类必须升级为抽象类
7.抽象类和普通类的区别
抽象类中可以有成员变量,成员方法,构造方法,静态方法,常量? 有的话又有什么意义呢?
成员变量 --> 给子类使用
成员方法 --> 给子类使用
构造方法 --> 帮助子类初始化父类继承下来的成员
静态方法 --> 直接通过类名访问,防止创建对象的不建议访问方式
常量 --> 可以,方便访问
抽象类和普通类没有区别,只不过是抽象类多了抽象方法而已
抽象类的抽象方法强制子类重写
非抽象方法直接给子类使用
构造方法和成员变量直接给子类使用
抽象类是一个彻头彻尾的服务类,服务于所有的子类
8.抽象类的成员一般使用 public 或者 protected
9.private final static native 可以用来修饰抽象方法吗?
private修饰的方法不能够被子类继承,更不可能被重写,abstract修饰的方法强制子类重写,二者冲突
final修饰的方法不能够被子类继承,更不可能被重写,abstract修饰的方法强制子类重写,二者冲突
static修饰的方法一般方便调用,一般都是用来实现功能的,抽象方法没有方法体,二者没有意义
native修饰的方法不是Java实现的,有方法体,抽象方法没有方法体,二者没有意义
举例1代码如下所示:
public class AbstractDemo01 {
public static void main(String[] args) {
// Shape s2 = new Shape();
Shape s = new Triangle(2, 3, 4);
System.out.println(s.getPerimeter());
s = new Circle(1);
System.out.println(s.getPerimeter());
Shape.staticMethod();
System.out.println(Shape.NUM);
}
}
abstract class Shape {
public static int NUM = 100;
String name;
public Shape() {
}
public Shape(String name) {
this.name = name;
}
public abstract double getPerimeter();
public abstract double getArea()