面向对象之抽象类

为了引出抽象类我们先来这样一个例子

package cn.edu.xatuii;

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void eat(Food f) {
        System.out.println(this.name + "吃" + f.getName());

    }

}

class Food {
    private String name;

    public Food(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        this.name = name;
        return name;
    }
}

class Chicken extends Food {

    public Chicken() {
        super("鸡");

    }
}

class yu extends Food {

    public yu() {
        super("鱼");

    }

}
 

测试类

package cn.edu.xatuii;

public class Test {
    @org.junit.Test
    public void test() {
        Person p = new Person("张三");
        Chicken c = new Chicken();
        Food f  = new Food("鸡");
        p.eat(f);
        p.eat(c);
    }

}

运行结果:

面向对象之抽象类

为了防止我们子类父类都可以引用,我们引入抽象类,将代码改造成这样

面向对象之抽象类

此时,调用的时候就会只通过子类调用,抽象类就不会被调用了。

为了进一步了解抽象类,我们将代码改造成这样

package cn.edu.xatuii;

public abstract class Person {      
    private String name;

    public Person(String name) {
        this.name = name;

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public abstract void eat(Food f);

    public abstract void work();

}

abstract class Food {
    private String name;

    public Food(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        this.name = name;
        return name;
    }
}

class Chicken extends Food {

    public Chicken() {
        super("鸡");

    }
}

class yu extends Food {

    public yu() {
        super("鱼");

    }

}

class Studen extends Person {

    public Studen(String name) {  
        super(name);

    }

    @Override
    public void eat(Food f) {
        System.out.println();

    }

    @Override
    public void work() {
        System.out.println("学习");

    }

}

面向对象之抽象类 

面向对象之抽象类

总结:抽象类里面有抽象方法,带有抽象方法的类叫抽象类,抽象类里面的方法不实现,只是定了规范,让子类去实现。子类继承抽象类就要实现抽象类里面的抽象类里面的所有抽象方法。父类只是定规范,只是保留了引用,让子类具体去实现。

class c extends B{

    @Override
    public void out() {
        System.out.println("hello world");
        
    }
    
}
 abstract class B{
     
     public abstract void out();
     
 }