引入:对于一个动物,不知道它吃什么,比如猫吃鱼,兔子吃萝卜。动物类中的 eat 方法往往由它的子类去具体实现。
class Animal {
public void eat() {
System.out.println("我不是具体的动物,目前不知道吃什么。");
}
}
父类方法的不确定性:
当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。
=> 所谓抽象方法就是没有实现的方法
=> 所谓没有实现就是指,没有方法体
=> 当一个类中存在抽象方法时,需要将该类声明为abstract类
=> 一般来说,抽象类会被继承,有其子类来实现抽象方法
访问修饰符 abstract 类名{
}
访问修饰符 abstract 返回类型 方法名(参数列表);
AbstractDetail01.java
abstract class A {
//抽象类不一定要包含abstract方法。
// 也就是说,抽象类可以没有abstract方法
// 还可以有实现的方法。
String name;
public void hi() {
System.out.println("hi");
}
}
c.
抽象类的本质还是类,所以可以有类的各种成员
abstract class C {
public int num;
public static String name = "haha";
public void hi() {
System.out.println("hi~");
}
public static void hello() {
System.out.println("hello!");
}
public abstract void eat();
}
d.
这里相等于Mama子类实现了父类GrandMa的抽象方法,所谓实现方法,就是有方法体(方法体内具体实现不关心)。
abstract class GrandMa {
public abstract void hi();
public abstract void hello();
}
class Mama extends GrandMa{
public void hi() {
System.out.println("hi");
}
public void hello() {
System.out.println("hello");
}
}
我的回答:
三个都不能
正确。
public class AbstractExercise01 {
public static void main(String[] args) {
Manager sb = new Manager("sb", 38, 6000.5,100.0);
CommonEmployee poor = new CommonEmployee("poor", 66, 5000.1);
sb.work();
poor.work();
}
}
abstract class Employee {
private String name;
private int id;
private double salary;
public Employee(String name, int id, double salary) {
this.name = name;
this.id = id;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
abstract public void work();
}
class Manager extends Employee {
public double bonus;
public Manager(String name, int id, double salary,double bonus) {
super(name,id,salary);
this.bonus = bonus;
}
public void work() {
System.out.println("Manager "+ this.getName() +" is sleeping···");
}
}
class CommonEmployee extends Employee {
public CommonEmployee(String name, int id, double salary) {
super(name,id,salary);
}
public void work() {
System.out.println("CommonEmployee "+this.getName()+" is working···");
}
}
和韩老师视频中的代码核对之后,改进的点:
CommonEmployee和Manager的work()方法上面写上 Override
@Override
本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03