其实呢,我一直想做学习笔记,但之前一直懒得做,今天看到群里的dalao貌似都有写笔记的习惯,所以我也就来这里写了(本来是要在gayhub上写的,但是本辣鸡不会用所以来这写了)
好吧,我开始写这篇文章的时候我已经开始学多态了,在这里我就整理一下抽象类,多态和接口。
-
抽象类:
- 当编写一个类时,我们会定义一些方法用以描述该类的行为方式,这些方法都要具体的方法体。但是,在某些时候,父类只知道子类应该包含什么样的方法,但不知道如何实现这些方法。例如:创建一个图形类(Shape),这个类提供一个计算周长的方法(calPerimeter()),但不同的图形有不同的计算周长的方法,即Shape类无法准确的知道子类计算周长的方法。
- 那么如何让Shape里包含calPerimeter()方法却又不实现这个方法呢? 抽象类就可以满足这个要求
- 抽象类的命名规则: abstract class 类名{。。。}
-
抽象方法的命名规则: 在抽象类中 abstract 。。。
-
抽象类与抽象方法的规则:
1. 如果一个函数没有方法体,那么该函数必须要使用abstract修饰,把该函数修饰成抽象 的函数。
2. 如果一个类出现了抽象的函数,那么该类也必须 使用abstract修饰。
3. 如果一个非抽象类继承了抽象类,那么必须要把抽象类的所有抽象方法全部实现。
4. 抽象类可以存在非抽象方法,也可以存在抽象的方法.
5. 抽象类可以不存在抽象方法的。
6. 抽象类是不能创建对象的
疑问:为什么抽象类不能创建对象呢?
因为抽象类是存在抽象方法的,如果能让抽象类创建对象的话,那么使用抽象的对象调用抽象方法是没有任何意义的
7. 抽象类是存在构造函数的,其构造函数是提供给子类创建对象的时候初始化父类的属性的
使用方法:代码举例:定义一个图形类计算面积与周长其子类为圆形与矩形
abstract class Shape {
String name;
public Shape(String name) {
this.name = name;
}
public abstract void getArea();
public abstract void getLength();
}
class Circle extends Shape {
double r;
public static final double PI = 3.14;
public Circle(String name, double r) {
super(name);
this.r = r;
}
public void getArea() {
System.out.println(name + "面积是" + PI * r * r);
}
public void getLength() {
System.out.println(name + "周长是" + 2 * PI * r);
}
}
class Rect extends Shape {
int width;
int longth;
public Rect(String name, int width, int longth) {
super(name);
this.longth = longth;
this.width = width;
}
public void getArea() {
System.out.println(name + "面积是" + longth * width);
}
public void getLength() {
System.out.println(name + "周长是" + 2 * (width + longth));
}
}
public class Demo2 {
public static void main(String[] args) {
Circle circle = new Circle("圆", 3);
circle.getArea();
circle.getLength();
Rect rect = new Rect("方形", 3, 5);
rect.getArea();
rect.getLength();
}
}
注意:继承了抽象类就必须实现抽象类中的所有抽象方法
抽象类的好处:强制要求子类一定要实现指定的方法
(本辣鸡第一次写博文,欢迎各位dalao指出错误,在代码方面就不要喷我了,本辣鸡水平有限)
欢迎加入ProgramLeague编程学习交流群: 319293196