JAVA 抽象类与接口

一、抽象类

如果一个类含有抽象方法,则称这个类为抽象类。抽象类是用abstract关键词修饰的。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。如果一个类继承了抽象类,那么就必须为抽象类中的抽象方法提供定义。如果不那么做,那继承的类也为抽象类。( 抽象方法是一种特殊的方法,它只有声明,而没有具体的实现。

抽象类和普通类一样,同样可以拥有成员变量和普通的成员方法。但是抽象类中的抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
抽象类是用abstract关键词修饰的

public abstract class 类名

抽象类的特点

1.抽象类不能实例化

2.抽象类中不一定有抽象方法,但是有抽象方法的一定是抽象类

3.继承抽象类必须要重写方法,不然这个类还是抽象类

4.抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰。

public abstract class Animal {     
    abstract void eat();           
    abstract void sleep();
    
}
   
public class Dog extends Animal {
    @Override
    void eat() {
    }
 
    @Override
    void sleep() {
    }
}
  
public abstract class Cat extends Animal{
    @Override
    void eat() {
        
    }
}

二、接口

接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

如果一个类只由抽象方法和全局常量组成,那么这种情况下不会将其定义为一个抽象类。只会定义为一个接口,所以接口严格的来讲属于一个特殊的类,而这个类里面只有抽象方法和全局常量,就连构造方法也没有。

例:定义一个接口
 

interface A{//定义一个接口

    public static final String MSG = "hello";//全局常量
    public abstract void print();//抽象方法
}

提示

1. 创建接口时,接口的命名一般以大写字母开头

2. 接口命名一般使用形容词词性的单词

接口体

                1. 常量(没有变量)  ( public static final ) int MAX = 100;     可以省略public static final

                2. 抽象方法                 (public abstract) void add();                 可以省略public abstract

                常量和抽象方法都只有一种访问修饰符:public

接口的实现

           关键字:implements

            1. 类可以实现一个或多个接口     public class Dog implements Eatable,Sleepable

                Dog 也可以继承一个具体类    public   class  Dog   extends   Animal  implements   Eatable , Sleepable

             2. 类中必须重写接口中的全部方法( 抽象类   可只重写接口中的部分方法)

             3. 类中重写的方法,访问修饰符必须是  public

             4. 接口中定义的常量,在继承了接口的类中可以直接使用

 接口间的继承 

             public interface A{}

             public interface B extends A{}      // 接口B继承的A

public interface Eatable{     //定义了一个Eatable接口
	void eat();
}
 
public interface Sleepable{    //定义了一个Sleepable接口
	void sleep();
}
 
public class Animal{          // 定义了一个Animal类
	public String name;
	public Animal(String name) {
		this.name = name;
	}
}
 
public Dog extends Animal implements Eatable,Sleepable{    //继承了Animal类,Eatable接口 ,Sleepable方法
	public Dog(String n) {
		this(n);
	}
	public void eat() {         //重写Eatable中的eat方法
		System.out.println(name+"吃骨头");
	}
	public void sleep() {       //重写Sleepable中的sleep方法
		System.out.println(name+"睡得很好");
	}
}

三、抽象类与接口的区别

参数抽象类(abstract class)接口(interface)
结构组成普通类+抽象方法抽象方法+全局常量
默认的方法实现它可以有默认的方法实现接口完全是抽象的。它根本不存在方法的实现
与Java普通类的区别除了你不能实例化抽象类之外,它和普通Java类没有任何区别接口是完全不同的类型
方法的访问修饰符 象方法可以有public、protected和default这些修饰符(注意不能是private)接口方法默认修饰符是public。你不可以使用其它修饰符。
变量的访问修饰符可以是修饰符只能是public static fianl(全局常量)
main方法抽象方法可以有main方法并且我们可以运行它抽象方法可以有main方法并且我们可以运行它
多继承抽象类可以继承一个类并实现多个接口 接口只能继承接口(一个或多个,使用extends关键字)
子类使用使用extends关键字继承抽象类  使用implements关键字实现接口
子类限制        一个子类只能继承一个抽象类一个子类可以实现多个接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值