3-成员方法:接口方法不能有方法体,说明接口方法必须是抽象方法。默认修饰符是public abstract建议每次自己给出。
总结: 1-类与类: 继承关系,只能单继承,可以多层继承 2-类与接口: 实现关系,可以单实现,可以多实现,也可以在继承类的同时实现单个或多个接口。 class son extends Object implements Father,Mather(){} 3-接口与接口: 继承关系,可以单继承和多继承 例如:interface Sister extends Father, Mather(){}; 抽象类和接口的区别: 1-成员区别: 接口: 成员变量:可以变量也可以常量 构造方法:有构造方法,用于子类访问父类数据的初始化。 成员方法:可以抽象也可以非抽象 抽象类: 成员变量:只能常量public static final 构造方法:没有构造方法 成员方法:只能抽象 public abstract 2-关系区别: 1- 类与类: 继承关系,只能单继承,可以多层继承
2-类与接口: 实现关系,可以单实现,可以多实现,也可以在继承类的同时实现单个或多个接口。 例如:class son extends Object implements Father,Mather{} 3-接口与接口: 继承关系,可以单继承和多继承 例如:interface Sister extends Father, Mather{}; 3-设计理念不同: 抽象类被继承的体现是is a的关系,该继承体系中共性的功能 接口被实现体现的是like a 的关系,该继承体系中拓展功能。
案例:
接口Jump
package day09; public interface Jump { public void jump(); }案例:定义一个动物类:
[java] view plain copy package day09; public abstract class AnimalDe1 { private String name; private int age; public AnimalDe1(){}; public AnimalDe1(String name,int age){ this.name=name; this.age=age; } public String getName(){ return name; } public void setName(String name){ this.name=name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public abstract void eat(); } 定义一个狗类: [java] view plain copy package day09; public class DogDe1 extends AnimalDe1 { public DogDe1(){} public DogDe1(String name,int age){ super(name,age); } public void eat() { System.out.println("狗吃肉!!!"); } } 定义一个猫类: [java] view plain copy package day09; public class CatDe1 extends AnimalDe1 { public CatDe1(){} public CatDe1(String name,int age){ super(name,age); } public void eat() { System.out.println("猫吃鱼!!!"); } }跳高猫类:
package day09; public class JumpCat extends CatDe1 implements Jump { public JumpCat(){} public JumpCat(String name,int age){ super(name,age); } public void jump() { System.out.println("跳高猫咪@"); } }
跳高狗类:
package day09; public class JumpDog extends DogDe1 implements Jump { public JumpDog(){} public JumpDog(String name,int age){ super(name,age); } public void jump() { System.out.println("跳高狗狗!"); } } 测试类: package day09; public class MainDe1 { /** * @param args */ public static void main(String[] args) { JumpDog dd = new JumpDog();//调用无参构造实现 dd.setName("狗狗1"); dd.setAge(2); System.out.println(dd.getName()+"年龄:"+dd.getAge()); dd.eat(); dd.jump(); System.out.println("------------------"); JumpDog dd1 = new JumpDog("狗狗2",3);//通过调用有参构造方法实现 System.out.println(dd1.getName()+"年龄:"+dd1.getAge()); dd1.eat(); dd1.jump(); } //猫类同理!! } 输出:
狗狗1年龄:2 狗吃肉!!! 跳高狗狗! ------------------ 狗狗2年龄:3 狗吃肉!!! 跳高狗狗!
案例2:
定义一个老师类和学生类,吸烟学生类吸烟老师类实现一个吸烟接口
吸烟接口:
package day09; public interface Smoking { public void smoke(); } 老师类:
package day09; public class Teacher1 { private String name; private int age; public Teacher1(){} public Teacher1(String name, int age){ this.name=name; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
学生类:
package day09; public class Student { private String name; private int age; public Student(){} public Student(String name, int age){ this.name=name; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
抽烟老师类:
package day09; public class Teacher1Smoke extends Teacher1 implements Smoking{ public Teacher1Smoke(){} public Teacher1Smoke(String name, int age){ super(name,age); } public void smoke() { System.out.println("老师抽烟@"); } }
抽烟学生类:
package day09; public class StudentSmoke extends Student implements Smoking { public StudentSmoke(){} public StudentSmoke(String name, int age){ super(name,age); } public void smoke() { System.out.println("学生抽烟!"); } }
测试类:
package day09; public class SmokeMain { /** * @param args */ public static void main(String[] args) { //创建抽烟学生对象 StudentSmoke ss = new StudentSmoke(); ss.setName("李春男"); ss.setAge(24); System.out.println(ss.getName()+ss.getAge()); ss.smoke(); System.out.println("-----------------------------"); StudentSmoke ss1 = new StudentSmoke("杨莉",24); System.out.println(ss1.getName()+ss1.getAge()); ss.smoke(); //老师类同理: } }
输出:
李春男24 学生抽烟! ----------------------------- 杨莉24 学生抽烟!