Java Abstract与Interface

本文详细解释了Java中抽象类和接口的概念与区别,包括如何使用抽象类和接口定义类的行为,以及它们在多态、继承等方面的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

abstract(抽象)修饰符,可以修饰类和方法

1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法。

2,abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以";"代替。需要子类继承实现(覆盖)。

注意:有抽象方法的类一定是抽象类。但是抽象类中不一定都是抽象方法,也可以全是具体方法。

abstract修饰符在修饰类时必须放在类名前。

abstract修饰方法就是要求其子类覆盖(实现)这个方法。调用时可以以多态方式调用子类覆盖(实现)后的方法,也就是说抽象方法必须在其子类中实现,除非子类本身也是抽象类。

注意:父类是抽象类,其中有抽象方法,那么子类继承父类,并把父类中的所有抽象方法都实现(覆盖)了,子类才有创建对象的实例的能力,否则子类也必须是抽象类。抽象类中可以有构造方法,是子类在构造子类对象时需要调用的父类(抽象类)的构造方法。
举个简单的例子下面有一个抽象类
abstract class E{
public  abstract  void  show();//public abstract 可以省略
}
然后其它类如果继承它通常为了实现它里面的方法
class F extends E{
     void show(){
    //写具体实现的代码 
}
}
最后再主方法里面定义一个父类引用指向子类对象,就会发生多态现象,比如 
E e=new F();
e.show();
实际调用了子类里面的show()方法 

Interface:接口
Abstract Class:抽象类
Class:类,包括抽象类。
学 Java 的人,或学 OO 编程的人,都是要弄清楚这两个概念的区别。
现将我的观点说一下。
在OO中,Interface 和Abstract Class 是两个不同的概念。
1。Abstract Class类似于 Abstract Data Type(抽象数据类型),它定义了它所有的subclass(子类)应该有的特性,就是在Abstract Class 中声明方法和变量。如定义一种抽象类型:车。那么在Java中,就要在class或method上加上 abstract。举个例:
public abstract class 车
{
  public int 轮子;
  public abstract void 移动();
}
这个抽象类就声明了所有的车应有的特征(如轮子)和行为(如移动)。之后你就可以扩展(extend)这个抽象类,只要是车,就可以,还有你可以在子类(subclass)中加入自己的特征,如
public class 跑车 extends 车
{
  public void 移动() 
  {
    System.out.println("我在移动");
  }   
  public void 引擎类型()  //属于自己(跑车)的行为
  {
    System.out.println("高级引擎");
  }
  轮子=4;
}
public class 自行车 extends 车
{
  public void 移动() 
  {
    System.out.println("我在移动");
  }   
  public void 爆胎()  //属于自己(自行车)的行为
  {
    System.out.println("我走不动了");
  }
  轮子=2;
}
2。Interface 则用来定义一个协议,所有的方法都可以实现它。一个Interface定义了方法,和最终静态(final static)变量,所有实现这个Interface的都要保证实现的东西与这个Interface 定义的行为一致。使用Interface可以让Object(对象)在一定的规范下沟通。

public interface TCP协议
{
public void 打开端口();
public void 关闭端口();
}
这样的话,只要实现这个Interface的都可以使用这两个方法交流。
在 Java平台里,它们主要有3个不同点:
1。一个类(Class)只能继承一个超类(Super class),但是可以实现多个Interface。
2。在Abstract Class内,你可以有不抽象(Abstract)的方法,即有意义的方法,但Interface不行。

public abstract class 车
{
  public int 轮子;
  public abstract void 移动();
  public String 我是什么()
  {
    return "车子";
  }
}
3。Interface不属于 继承范围。即不可能成为超类(Super Class)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值