JAVA——抽象类和接口

一、抽象类

在继承的层次结构中,每个新子类都使类变得越来越明确和具体。如果从一个子类追溯到父类,类就会变得更通用、更加不明确。类的设计应该确保父类包含它的子类的共同特征。有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类(abstract class)。

abstract修饰符:

  1. abstract修饰的类为抽象类,此类不能有对象,(无法对此类进行实例化,说白了就是不能new);
  2. abstract修饰的方法为抽象方法,此方法不能有方法体(就是什么内容不能有);

关于抽象类的使用特点:

  1. 抽象类不能有对象,(不能用new此关键字来创建抽象类的对象);
  2. 有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法;
  3. 抽象类中的抽象方法必须在子类中被重写。
public abstract class Animal {
  public abstract void eat();//抽象函数。需要abstract修饰并且以分号结尾
  public abstract void sleep()}

以上代码是定义了一个叫做animal的抽象类,其中含有eat()和sleep()两个抽象方法。
接下来定义一个非抽象类Bird类:

public class Bird extends Animal{
	@Override
	public void eat() {
		System.out.println("我是鸟,谷物、水果和蔬菜我都吃。");
	}
	@Override
	public void sleep() {
		System.out.println("早起的鸟儿有虫吃!");
	}
}

当一个类继承抽象类的时候,这个类必须去重写所继承的抽象类的抽象方法,否则编译器会报“The type Cat must implement the inherited abstract method Animal.eat()”的错误。

二、接口

接口在许多方面都与抽象类很相似,但是它的目的是指明相关或者不相关类的多个对象的 , 共同行为。例如,使用正确的接口,可以指明这些对象是可比较的、可食用的,以及可克隆的。

在Java中,接口被看作是一种特殊的类。就像常规类一样,每个接口都被编译为独立的字节码文件。使用接口或多或少有点像使用抽象类。例如,可以使用接口作为引用变量的数据类型或类型转换的结果等。与抽象类相似,不能使用new操作符创建接口的实例。

重要的几个知识点:

  1. 接口中的所有属性默认为:public static final ****;
  2. 接口中的所有方法默认为:public abstract ****;
  3. 接口不再像类一样用关键字 extends去“继承”,而是用 implements 去“实现”,也就是说类和接口的关系叫做实现,(例如:A类实现了B接口,那么成为A为B接口的实现类。而类与类之间的继承的话,叫做A类继承了B类,其中B类即为A类的父类)。实现接口与类的继承比较相似。
  4. 一个接口可以继承多个父接口,但不能继承类
  5. 接口的作用:1.java不像c++一样支持多继承,所以用接口来弥补 2.用来实现抽象(和抽象类有所区别)。
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();
}

以上代码定义了三个接口分别是:Study,Eat,Sleep

public class Bird 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("我是人,我每天要睡10小时");
	}
}

以上代码定义了两个类分别是Bird和Person,其中Bird类实现了两个接口分别是:Eat和Sleep,而Person实现了三个接口分别是:Study,Eat,Sleep。
抽象类和接口的几点区别:

  1. 抽象类描述的是“是不是”的问题,而接口描述的是“有没有”的问题。
  2. 在Java中类的继承是“单继承”,可以“多对一”,但是不允许“一对多”。而一个类却可以同时实现多个接口。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值