JAVA学习笔记1之抽象类

时间:2023-02-26 19:42:15
    其实呢,我一直想做学习笔记,但之前一直懒得做,今天看到群里的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