20220725 第五小组 罗大禹 学习笔记
Java 面向对象:抽象
学习重点
1.抽象类
2.接口
学习心得
今天讲的内容还是比较好理解的,就是还是有点不太熟悉。
学习内容
Java 面对对象:抽象
抽象类及接口(理解)
在Java中除了类,还有抽象类和接口
抽象类(理解)
比类更高级的抽象
public abstract class Animal {//抽象类
public abstract eat();//抽象方法
}
abstract 关键字
abstract能修饰什么
-
类
被abstract关键字修饰的类被称为抽象类,
-
方法
被abstract修饰的方法被称为抽象方法, 抽象方法没有方法体(没有大括号)
一个类如果继承了一个抽象类,就必须重写这个抽象类所有的的抽象方法
抽象类(理解)
- 抽象类是不能被直接实例化的,需要依靠子类采用向上转型的方式处理
- 抽象类必须有子类,使用extends继承,一个类只能继承一个抽象类
- 子类(如果不是抽象类),则必须重写抽象类中的所有抽象方法
抽象方法(理解)
抽象方法必须在抽象类中
-
当我们定义了一个抽象类,这个抽象类可以有哪些结构?
属性,成员方法,构造器,抽象方法,常量 -
抽象类中能不能没有抽象方法
抽象类可以没有抽象方法(如果没有抽象方法,尽量不要写抽象类) -
抽象类的构造器存在的意义
为了约定子类的构造器必须与父类要匹配 -
抽象方法到底约定了什么?规定了什么?定了那些规则?
约定了返回值,约定了返回权限,约定了参数列
- 抽象方法必须是public或者protected(因为如果是private,不能被子类重写),默认情况是可以的
注意:
抽象方法不能用private修饰,开发中,抽象方法基本上都是public
抽象方法不能用final修饰,用final修饰的方法是不可以被重写的
抽象类不能用final修饰,用final修饰的类是不允许被继承的。
约定大于配置,配置大于代码
接口(理解)
比抽象类更高级的抽象
接口存在的意义:
约定(比抽象类更加严格)
interface关键字
使用interface关键字声明接口:
public interface Ch02{
}
接口中能有什么?
JDK7之前:接口中只能定义抽象方法,不能有属性,不能有方法,可以有静态常量
JDK8及以后:接口中只能定义抽象方法,不能有属性,可以有默认方法和静态方法以及静态常量
JDK7——JDK8:多了默认方法和静态方法
//接口
public interface Biology {
// 静态常量
public static final String NAME = "张三";
// 抽象方法
public abstract void breath();
// 抽象方法
public abstract void eat();
// 静态方法
public static void show(){
}
注意:
接口中的抽象方法默认是public abstract,我们推荐省略
接口中的常量默认是public static final,我们推荐省略
接口中的结构必须是public,默认均为public
接口中结构的特点:
public interface Ch01{}
public interface Ch02{}
public interface Ch03{}
public class Ch04 implements Ch01,Ch02,Ch03{}
接口可以被实现,实现接口的类被称为实现类
接口可通过implements关键字来实现!
实现接口是可以多实现的,中间用 ” , ” 隔开
如果一个类实现了一个接口,它就需要重写接口中所有的抽象方法
注意:
实现接口是可以多实现的,而继承只能单继承
开发中,如果一件事情可以通过继承和实现接口来解决问题,使用接口解决。
多态的前提条件
1、继承,实现
2、重写方法
3、父类——子类,接口—实现类
匿名实现类(理解)
举例说明
package com.jsoft.afternoon;
/**
* 匿名实现类
*
*/
public class Ch01 {
public static void main(String[] args) {
//Abstr01为抽象类
Abstr01 a01 = new Abstr01() {
@Override
public void show() {
System.out.println("重写过后的show方法...");
}
};
a01.show();
//Inter01为接口
Inter01 inter01 = new Inter01() {
@Override
public void eat() {
System.out.println("重写过后的eat方法...");
}
};
inter01.eat();
}
}
面试题:
1、继承抽象类和实现接口的异同
2、抽象类和接口的区别
3、 java中只有单继承对不对?
栈和队列:(理解)
栈和队列是两种操作受限的线性表。
这种受限表现在:
栈的插入和删除只允许在表的尾端进行(在栈中叫做“栈顶”),满足FILO First In Last Out;
队列只允许在表尾插入元素,在表头删除元素,FIFO First In First Out
栈与队列的相同点:
- 都是线性结构
- 插入操作都是在表尾进行
- 都可以通过顺序结构和链式结构实现。
栈与队列的不同点:
队列,先进先出,栈先进后出
原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/277196.html