1、了解接口和抽象类的发展过程;
2、掌握抽象类与接口的特点;
3、掌握抽象类与接口的构成;
4、举实例说明。
5、分析两者的区别。
学习内容: 一、抽象类
1.1抽象类的产生
通过先前的学习,我们了解到类由属性和方法构成;类的继承中,子类会继承父类的属性和方法。有时候,子类要实现的方法与父类不同,此时,虽然子类可以重写父类方法,但当继承子类特别多时,每个子类都要重写父类方法,过于繁琐,且父类方法不再重要。那么,我们是不是可以不写父类具体的具体的方法体呢?这就是抽象类的由来。
1.2抽象类的特点(抽象方法)
1.2.1抽象类的特点,在于abstract(抽象)二字上。abstract修饰的方法的被称为抽象方法,这类方法不需要具体的方法体。形如 【修饰符】abstract 返回值类型 方法名(【参数列表】);
拥有抽象方法的类被称为抽象类,抽象类也需要用到abstract修饰。【修饰符】abstract 类名class{}
1.2.2抽象类不能实例化
抽象类由于含有抽象方法,所以他不能直接被实例化。子类继承后,重写抽象方法后,才可以实例化该子类。
1.2.3抽象类中除了抽象方法外,还可以有其他方法;
public abstract Book{ String name; int price; public abstract void read(); } public EnglishBook extends Book{ public void read(){ System.out.println("读英语书"); } } public class test{ public static void main(String[] args){ EnglishBook english = new English(); english.read(); } }二接口
2.1接口的来历
我们知道抽象类是由于类中含有抽象方法,那么我们可不可以定义一个只有抽象方法的类。
这个只有抽象方法的类被称为接口。
2.2接口的特点
2.2.1接口中没有普通方法,全为抽象方法,默认修饰符为 public abstrace。 jdk8以后,接口中引入了默认方法和静态方法(又称类方法),下文中详细接收。
2.2.2 接口的属性全为final修饰的常量!!!默认修饰符为 public static final
2.2.3 接口的定义不再使用class,而改为interface定义
2.2.4子类使用implement继承接口。同时可以继承多个父接口,这就解决了子类只能继承一个父类的问题,使子类的形成,更加便利。
2.2.5子接口也可以同时继承多个父接口,子接口使用extends继承父接口。
2.3常见的接口定义形式
[修饰符] interface 接口 [extends 父接口1,父接口2]{ //常量一定要进行初始化 【public】【static】【final】常量类型 常量名 = 常量值; 【public】【abstrace】方法返回值类型 方法名(【参数列表】); [public] default 方法返回值类型 方法名([参数列表]){ //默认方法的方法体}; [public] static 方法返回值类型 方法名(参数列表}){//静态方法的方法体} }
举例
interface Animal{ //定义常量 String name ="Animal"; //定义抽象方法 public abstract void breath(); } interface dog extends Animal{ public abstrace void eat(); } class hashiqi implements dog{ public void breath(){ System.out.println("动物都会呼吸.");} public void eat(String foot){System,out.println("狗狗吃"+foot);} } class test{ public static void mian(String args){ hashiqi erha = new hashiqi(); System.out.println(erha.name); erha.eat("骨头"); erha.breath(); } }
2.4静态方法
2.4.1静态方法默认用 static修饰;
2.4.2静态方法允许有方法体;
2.4.3静态方法可以通过 接口.方法名 直接进行调用。有时候程序员希望,在不创建实例对象的情况下,就可以调用接口的某个方法,这时候 静态方法就显得即为重要。 当然,静态方法也可以通过接口的实现类的实例对象来调用;
2.5默认方法
2.5.1接口中的默认方法同父类的方法一样,可以有方法体
2.5.2 默认方法可以被子类重写;
2.5.3默认方法使用default修饰;
2.5.4默认方法只能通过接口的实现类的实例对象来调用。
三 接口和抽象类的区别
1 “有没有”和“是不是”
接口可以多继承,也就是可以有多个接口供子类“有没有“去选择继承;
public interface Sleep { public static int a = 1; public static int b = 2; public void ioSleep(int i); } public interface Eat { public abstract void ioEat(); } public interface Study { public void ioStudy(); } public class Cat implements Sleep,Eat{ @Override public void ioSleep(int i) { System.out.println("我是猫,我每天都不用睡觉!!!"); } @Override public void ioEat() { System.out.println("我是猫,我吃猫粮!!!"); } } public class Person implements Sleep,Eat,Study{ @Override public void ioStudy() { System.out.println("我是人,我每天都要学习"); } @Override public void ioEat() { System.out.println("我是人,我要吃大鱼大肉还要喝酒"); } @Override public void ioSleep(int i) { System.out.println("我是人,我每天要睡24小时"); } }
而抽象类是单继承,抽象类的多种方法是让子类是不是;
1.抽象类描述的是“是不是”的问题,而接口描述的是“有没有”的问题;
2.在Java中类的继承是“单继承”,可以“多对一”,但是不允许“一对多”。而一个类却可以同时实现多个接口;
3.2
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)