2021.02.08
第四次纪录
今天主要学习抽象类abstract,和接口interface的部分内容
课堂笔记:
抽象类:
/*抽象类:
- 1.什么是抽象类?
- 类和类之间具有共同特征,将这些特征提取出来,形成的就是抽象类。
- 类本身是不存在的,所以抽象类无法创建对象《无法实例化》。
- 2.抽象类属于什么类型:引用数据类型
- 3.抽象类的基本语法:
- [修饰符列表] abstract class 类名 {
- 类体}
- 4.抽象类是无法实例化的、无法创建对象的,所以抽象类是用来被子类继承的。
- 5.final和abstract无法联合使用,这两个关键字是对立的
- 6.抽象类的子类还可以是抽象类
- 7.抽象类虽然无法实例化,但可以有构造方法,这个构造方法是供子类使用的
- 8.抽象类关联一个概念:抽象方法。
- 抽象方法表示没有实现的方法,没有方法体的方法。例如:
- public abstract void doSome();
- 抽象方法特点:
-
第一:没有方法体,以分号结尾;
-
第二:前面修饰符列表中有abstract关键字
*9.抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中
*10.如果父类是抽象类,子类为非抽象类,父类中有抽象方法,那么子类则必须要进行方法覆盖/重写/实现,
- 此时子类方法的要求是去掉abstract,以及“分号;”,并在分号后加上“{}”,
- 如: public void withDraw(){}。
- 注意:或者子类也加上abstract,变为抽象类,那么不进行方法覆盖,编译器也会通过。
- 但是却new不了对象 */
代码演示1:
public class AbstractDemo01 {
public static void main(String[] args) {
//面向抽象编程,不要面向具体编程,降低程序的耦合度,提高程序的扩展力,这种编程思想符合OCP原则
Account011 a = new creditAccount011(); //这就是面向抽象编程
a.withDraw();
a.doSome();
}
}
abstract class Account011 {
String name;
public Account011(){
}
public Account011(String name){
this.name = name;
}
public void doSome(){
System.out.println("do something");
}
public abstract void withDraw();
}
class creditAccount011 extends Account011 {
public creditAccount011(){
super();
}
//需要将从父类中继承过来的抽象方法进行覆盖/重写,或者也可以叫做实现。
//把抽象方法实现了。
public void withDraw(){
System.out.println("取钱");
}
}
输出结果:
取钱
do something
接口:
课堂笔记:
/*接口:
- 1.接口也是一种引用数据类型
- 2.接口是完全抽象的。(抽象类是半抽象)或者也可以说接口是特殊的抽象类
- 3.接口怎么定义,语法是什么?
- [修饰符列表] interface 接口名 {}
- 4.接口支持多继承,并且一个接口可以继承多个接口
- 5.接口中只包含两部分内容,一部分是:常量。一部分是:抽象方法。
- 接口中没有其他内容,只有这两个部分
- 6.接口中所有的元素都是public修饰的(都是公开的)
- 7.接口中的抽象方法定义时:public abstract修饰符可以省略。
- 8.接口中定义一个常量,public static final修饰符可以省略
- 9.接口中的方法都是抽象方法,所以接口中的方法不能有方法体。*/
代码演示2:
```java
public class interfaceDemo01 {
public static void main(String[] args) {
System.out.println("PI = " + MyMath.PI);
}
}
interface A {
}
interface B {
}
interface C extends A, B {
}
interface MyMath {
// public static final double PI = 3.1415926;
//常量中public static final可以省略
double PI = 3.1415926;
//public abstract int sum(int a, int b);
//public abstract可以省略
int sum(int a, int b);
int sub(int a, int b);
//Error:(33, 23) java: 接口抽象方法不能带有主体
/*public void show(){
}*/
}
输出结果:
PI = 3.1415926