JAVA抽象类与接口

JAVA抽象类与接口

一、抽象类的概述
1、抽象类的引入:
   以前学的猫狗案例,在父类中我们都给出具体的共性方法,但在实际情况中,每个子类对于共性方法的实现是不同的,这就引出了抽象类的概念。
   抽象类即在继承条件下,父类中的共性功能,对于子类来说实现有差异,所以在父类中我们不必给出具体的实现,只需给出一个抽象的方法声明即可,实现交由子类自己重写,这个方法就叫抽象方法,而含有抽象方法的类就叫做抽象类。
2、抽象类与抽象方法格式:
   抽象类:abstract class 类名 {}
   抽象方法格式:	public abstract void eat();
3、抽象类不一定有抽象方法,而有抽象方法的一定是抽象类。
4、抽象类的子类要麽是抽象类,要麽就重写抽象类的所有抽象方法。
二、抽象类的特点
1、 a:成员变量:既可以是变量,也可以是常量。
	b:构造方法:有,作用是用于子类访问父类数据的初始化。
	c:成员方法:既可以是抽象的,也可以是非抽象的。
2、成员方法:
    抽象方法:强制要求子类必须重写。
    非抽象方法:子类也可以继承,这样提高了代码的复用性。
3、abstract关键字与其他关键字共存问题
        private    冲突
		final      冲突
		static     不能共存 无意义
三、接口概述
1、在继承时,有时候有的子类需要别的扩展功能,比如狗,有的狗会跳铁圈,而不是所有的狗都会,所以把跳铁圈写进父类就不好,这时候我们就可以建一个接口,把这些扩展功能写进去,谁需要让谁实现这个接口就行了。
2、 a:接口用关键字interface表示		 格式: 	interface 接口名 {}
	b:类实现接口用implements表示	 格式:	class 类名 implements 接口名 {}
	c:接口的子类
	   可以是抽象类。但是意义不大。
	   可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
四、接口的成员特点
1、成员变量
 接口中的成员变量都是常量,都是静态的,前面有默认的public static final
2、接口中没有构造方法。
3、接口中的方法都是抽象的,有默认修饰符public abstract
五、抽象类与接口的区别
1、成员区别
 抽象类:成员变量:变量,常量都行
        构造方法:存在
        成员方法:可以抽象,也可以非抽象
 接口:成员变量:只能常量
      成员方法:只能抽象
2、类与类、类与接口、接口与接口的关系:
     类与类:单继承,多层继承
     类与接口:单实现也可以多实现,并且可以在继承一个类的同时实现多个接口。
     接口与接口:单继承,多继承。
六、抽象类与接口示例
老师有基础班的,也有就业班的。
共性:
	属性:姓名,年龄
	功能:讲课。
现在又要针对日语这种小语种单独开班,
需要部分基础班老师和部分就业班老师会说日语。
请用所学知识把上面的内容用代码体现。
测试类:
public class Mytest {
    public static void main(String[] args) {
        Teacher teacher=new Jichu();
        teacher.show("张三",30);
        teacher.Teach();
        Japannese japannese=new Jichu();
        japannese.Teachjapannese();
        System.out.println("%%%%%%%%%%%%%%%%%%%");
        Teacher teacher1=new Jiuye();
        teacher1.show("李四",25);
        teacher1.Teach();
        Japannese japannese1=new Jiuye();
        japannese1.Teachjapannese();
    }
}
父类:
public abstract class Teacher {
    String name;
    int age;
    public abstract void Teach();
    public void show(String name, int age){
    };
}
接口:
public interface Japannese {
    public abstract void Teachjapannese();
}
基础班子类:
public class Jichu extends Teacher implements Japannese {
    @Override
    public void Teach() {
        System.out.println("教基础班课程");
    }

    @Override
    public void show(String name, int age) {
        System.out.println("姓名"+name+",年龄"+age);
    }

    @Override
    public void Teachjapannese() {
        System.out.println("学会说日语");
    }
}
就业班子类:
public class Jiuye extends Teacher implements Japannese{
    @Override
    public void Teach() {
        System.out.println("教就业班课程");
    }

    @Override
    public void show(String name, int age) {
        System.out.println("姓名"+name+",年龄"+age);
    }

    @Override
    public void Teachjapannese() {
        System.out.println("学会说日语");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值