抽象类,接口一口气说清楚

抽象类:如果一个类中存在抽象方法,那么这个类必须声明为抽象类。

抽象方法:将共性的方法抽取到父类中之后,由于每个子类所执行的内容不一样,在父类中不能确定具体的方法体,则该方法为抽象方法。

接口:就是对一种规则对行为的抽象。

抽象方法的定义语法

public abstract 返回值类型 方法名(参数列表);

抽象类的定义语法

public abstract class 类名{}

注意: 1.抽象类不能创建对象。 

            2.抽象类中不一定有抽象方法,但是只要有抽象方则该类一定为抽象类。

            3.抽象类可以有构造方法(给抽象类创建一个子类便可以调用抽象类中的构造方法了。

            4.抽象类的子类:1.要么子类全为抽象类2.要么重写抽象类中所有的抽象方法

 


接口的定义(interface)

public interface 接口名(){}

接口与接口之间是实现关系(implement),并不是继承关系

例如:

public interface 类名 implement 接口名(){} 

 


注:1.接口不能实例化 。

2.接口和类之间为实现关系通过implement来实现

3.接口的子类要么为抽象类,要么重写接口中的所有抽象类方法。

4.接口与类之间可以单实现也可以多实现。public class student implement study,play(){}

5.实现类还可以在继承一个类的同时实现接口。public class student extend person implement study(){}。

最后奉献一个简单的接口代码:

要求:  p运动员(psport):姓名,年龄,学p,说英语

            b运动员(bsport):姓名,年龄,学b

           p老师(pteacher) : 姓名,年龄,教p,说英语

            b老师(bteacher): 姓名, 年龄,教b

 思路: 先对每一个元素进行拆分重组

1.每一个人都有姓名和年龄,  因此抽取一个父类(person)来存放所有的人

2.psoprt 和 pteacher 都会说英语, 因此抽取一个英语的接口。

3.psport和bsport 都是在学习  , 因此定义一个抽象类(sprot)来存放如何学习。

4.pteacher和bteacher 都是在教学  , 因此定义一个抽象类(teacher)来存放如何教学。

5.简化为person 为父类   teacher 和sport来继承 person, pteacher和bteacher继承teacher

psport和bsport  来继承sport。 

父类person

//使得外界创建person类的对象没有意义 abstract
public abstract class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Person{name = " + name + ", age = " + age + "}";
    }
}

 

sport类


public abstract class Sport extends Person{
    public Sport(){}
    public Sport(String name, int age){
        super(name,age);
    }
    public abstract void Sport();
}

teacher类


public abstract class Teacher extends Person {
    public Teacher(){}
    public Teacher(String name , int age){
        super(name, age);
    }
    public abstract void teacher();
}

 

 

bsport和psport类  接口speak

public class baSport extends Sport{
    public baSport(){}
    public baSport(String name , int age){
        super(name,age);
    }
    @Override
    public void Sport(){
        System.out.println("学习篮球");
    }
}
public class ppSport extends Sport implements speak{
    @Override
    public void Sport(){
        System.out.println("学习乒乓球");
    }
    public ppSport(){}
    public ppSport(String name , int age){
        super(name, age);
    }
    @Override
    public void speakEnglish(){
        System.out.println("用英语交流");
    }
}

public interface speak {
    public abstract void speakEnglish();
}

 

bteacher类和pteacher类




public class baTeacher extends Teacher{
    public baTeacher(){}
    public baTeacher(String name , int age){
        super(name, age);
    }

    @Override
    public void teacher(){
        System.out.println("教打篮球");
    }
}
public class ppTeacher extends Teacher implements speak{
    public ppTeacher() {
    }

    public ppTeacher(String name, int age) {
        super(name, age);
    }

    @Override
    public void teacher() {
        System.out.println("教打乒乓球");
    }
    @Override
    public void speakEnglish(){
        System.out.println("用英语交流");
    }
}
测试类



public class Test {
    public static void main(String[] args) {
        baSport b1 =new baSport("篮球运动员",21);
        System.out.println(b1.getAge()+b1.getName());
        b1.Sport();
        ppSport p1 = new ppSport("乒乒球运动员",22);
        System.out.println(p1.getAge()+p1.getName());
        p1.Sport();
        p1.speakEnglish();
        ppTeacher p2 = new ppTeacher();
        p2.speakEnglish();
        p2.teacher();
        baTeacher b2 = new baTeacher();
        b2.teacher();

    }
}

以上就是对抽象类抽象方法以及接口的全部认识

如有不足之处请批评改正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值