抽象类:定义共性功能,继承抽象类,那么抽象类中的抽象方法必须全部实现。
抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中抽象类不可以直接创建对象(原因:调用抽象方法没有意义)只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。不然子类也要是抽象类。接口:用于拓展性。(谁需要这个功能,就给谁)
包含了功能声明的特殊类。定义格式:public interface 接口名{} 使用格式:class A implements 接口名{}接口中可以定义成员变量,但变量只能是最终变量,并且是静态的。默认修饰符:public static final。接口中可以定义方法,但只能是抽象方法。接口中没有构造方法,不可以创建对对象。子类必须覆盖掉接口中所有的抽象方法,子类才可以实例化。抽象类
抽象类一定是父类抽象类中可以不定义抽象方法(意义:静态方法可以直接让子类去使用)关键字不可以和private,final一起用。(final声明的类不允许有子类,private私有的不允许覆写)接口
多个接口之间可以使用extends进行多继承类可以实现多个接口代码示例:
package day0526; /** * 1、类可以实现多个接口 * 必须实现接口的所有抽象方法 * 注:可以实现部分方法,但该类必须是抽象类 * 2、接口可以实现多继承 */ //多实现 public class demo1 implements Inter1,Inter { public void show(){ } } //多继承 interface Inter extends Inter1,Inter2{ //定义变量默认修饰符public static final int a=10; //定义方法默认修饰符public abstract void show(); //接口中不允许有构造方法 } interface Inter1{ } interface Inter2{ }二者的选用
优先选择接口,尽量少用抽象类需要定义子类的行为,又要为子类提供共性功能时才选用抽象类。要想实现这些,首先我们先来分析一下。
然后在画图分析他们之间的关系,每个对象之间的联系,以及他们的属性和方法。
分析完之后,用代码来实现。
//定义接口
interface Learnenglish{
public abstract void learnspeaking();
}
//公共的抽象类(人)
abstract class Person1{
private String name;
private int age;
public Person1(String name,int age) {
this.name=name;
this.age=age;
}
public void Print() {
System.out.println(name+"---"+age);
}
public abstract void eat() ;
public abstract void sleep();
}
//抽象类(运动员)
abstract class Athlete extends Person1{
public Athlete(String name,int age) {
super(name,age);
}
public void eat() {
System.out.println("吃健康的食物。");
}
public void sleep() {
System.out.println("早睡早起");
}
public abstract void learn();
}
//抽象类(教练)
abstract class Coach extends Person1{
public Coach(String name,int age) {
super(name,age);
}
public void eat() {
System.out.println("合理膳食,保持身体");
}
public void sleep() {
System.out.println("作息规律");
}
public abstract void teach();
}
//具体的类(运动员)
class PingPong extends Athlete implements Learnenglish{
public PingPong(String name,int age) {
super(name,age);
}
public void learn() {
System.out.println("学习乒乓球");
}
public void learnspeaking() {
System.out.println("学习英语!");
}
}
class Basketball extends Athlete{
public Basketball(String name,int age) {
super(name,age);
}
public void learn() {
System.out.println("学习篮球");
}
}
//具体的类(教练)
class PingCoach extends Coach implements Learnenglish{
public PingCoach(String name,int age) {
super(name,age);
}
public void teach() {
System.out.println("乒乓球教学");
}
public void learnspeaking() {
System.out.println("学习英语!");
}
}
class BasketCoach extends Coach{
public BasketCoach(String name,int age) {
super(name,age);
}
public void teach() {
System.out.println("篮球教学");
}
}
//测试类
public class Myproject1 {
public static void main(String[]args) {
BasketCoach a=new BasketCoach ("yyy",20);
a.Print();
a.eat();
a.sleep();
a.teach();
}
}
一个篮球教练的测试类:
运行结果:
一个乒乓球运动员的测试类:
运行结果:
