1. 类和方法都要被关键字abstract去修饰
2. 抽象的方法不用去实现而只要声明一下就可以了
3. 抽象类不可以去实例化,也就是不能去new
4. 一个类中如果含有抽象方法,那么这个类就必须被声明为抽象类,继承它的子类必须去覆写这个抽象方法才可以被实例化
package unicorn.demo;
abstract class Person{
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(String name,int age){
this.setName(name);
this.setAge(age);
}
public abstract String getSay();
public void say(){
System.out.println(this.getSay());
}
}
class Worker extends Person{
private float money;
public float getMoney() {
return money;
}
public void setMoney(float money) {
this.money = money;
}
public Worker(String name,int age,float money){
super(name,age);
this.setMoney(money);
}
public String getSay(){
return "I am a worker,My name is:"+super.getName()+",Age:"+super.getAge()+",Money:"+this.getMoney();
}
}
class Student extends Person{
private float score;
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public Student(String name,int age,float score){
super(name,age);
this.setScore(score);
}
public String getSay(){
return "I am a student,My name is:"+super.getName()+",age:"+super.getAge()+",score:"+this.getScore();
}
}
public class Demo {
public static void main(String[] args) {
Person p1=new Worker("unicorn",25,6000);
Person p2=new Student("liangxi",13,90);
p1.say();
p2.say();
}
}
大家知道,在java中只允许单继承,但是在实际问题中往往都需要多继承,java引入了接口这一概念。(一个类可以实现多个接口)
由于接口中都是抽象方法,那么我们在实现它的时候就必须全部覆写这些方法。假如我有一个类,这个类只想覆写一部份方法怎么办?
在接口与这个类中间可以加一个抽象类:
抽象类去覆写接口中的全部方法,而那个类去继承这个抽象类,根据需要覆写抽象类中的方法。(简单的适配器模式)
package unicorn.demo;
interface Eat{
public void eatBread();
public void eatApple();
public void eatBanana();
}
abstract class PersonEat implements Eat{
public void eatBread(){
}
public void eatApple(){}
public void eatBanana(){}
}
class Person extends PersonEat{
public void eatBread(){
System.out.println("eatBread");
}
public void eatApple(){
System.out.println("eatApple");
}
}
public class Demo02 {
public static void main(String[] args) {
Person p=new Person();
p.eatBread();
p.eatApple();
}
}