Java:抽象类(abstract)和接口

本文详细解析了Java中的抽象类和接口,包括抽象类的定义、抽象方法特性、接口概念与继承,以及它们在面向接口编程中的作用。重点对比了两者在继承、方法类型和实现方式上的区别,帮助理解接口如何实现类似多重继承的功能。

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

目录

1.抽象类:

        抽象类的特点:

       抽象类与普通类的区别:

1.2.抽象方法

1.3.小结

2.接口        

接口的概念

接口的定义

接口特点和接口继承:

接口的实现者:实现类

面向接口编程:

接口与抽象类的区别:     


1.抽象类:

        凡是用abstract修饰符修饰的类称为抽象类。抽象类就是没有具体对象的概念类。

        抽象类不能被实例化,否则会产生编译错误。

        抽象类的特点:

  • 不能创建一个实例即不能new一个抽象类即使创建出抽象类对象,调用抽象方法 ,根本没有方法体
  • 可以不包含抽象方法,若一旦包含,该类必须 作为抽象类,抽象类可以包含普通方法(留给子类调用),抽象类是有构造方法的,子类构造方法必须先调用父类构造方法。
  • 如果子类没有实现/重写父类所以的抽象方法,那么子类也得作为抽象类(让它的子类去实现)
  • 构造方法不都定义为私有的,否则不能有子类(调用子类时先调用父类的构造方法)。
  • 抽象类不能用final修饰,因为必须有子类,抽象方法才能够实现
  • 抽象类时不完整的类,必须作为父类(必须有子类),功能才能得以实现。

       抽象类与普通类的区别:


1.普通类有的成员(方法、字段、构造器),抽象类都有

2.抽象类不能创建对象,抽象类中包含抽象方法。

3.抽象类必须作为父类。

代码如下:

定义一个抽象类

//定义一个抽象类
public abstract class Animal {
	//定义一个抽象方法
	public abstract void eat();
	
	//定义一个普通方法
	public void show() {
		System.out.println("我有眼睛和鼻子");
	}
}

        抽象方法里必须是在抽象类中,而抽象类中可以有普通方法。抽象方法没有方法体,以“;”结束。

定义一个Cat类,继承抽象方法

//继承抽象方法
public class Cat extends Animal {

	//重写父类的抽象方法
	@Override
	public void eat() {
		System.out.println("我喜欢吃猫粮");
	}
	
	
}

        继承Animal类后,需要重写Animal类中的抽象方法,如果不想重写可以将Cat类定义一个抽象类,否则会编译错误。

定义一个测试类

public class Text {

	public static void main(String[] args) {
		//Animal不能实例化,否则会报错。
//		Animal a = new Animal();
		//实例化Cat类
		Cat c= new Cat();
		c.show();
		c.eat();

	}

}

        因为Animal是抽象类,所以Animal不能实例化。

1.2.抽象方法

        被abstract修饰的方法叫做抽象方法,抽象方法的作用是为所有子类定义一个统一的接口。对象方法只需声明,而不需实现,即用分号(;)而不是{}。

        抽象类可以包含抽象方法,也可以不包含抽象方法,但是一旦包含了抽象方法,该类必须为抽象类。

        抽象方法在子类必须实现,否则子类仍是抽象类。

        注意:
                1.abstract不能与final并列修饰同一个类

                2.abstract不能与private, static, final或native并列修饰同一方法

                3.abstract方法必须位于abstract类中

1.3.小结

被abstract修饰的类是抽象类
      1.抽象类无法实例化对象
      2.抽象方法没有方法体
      3.父类的抽象方法必须被子类重写
      4.抽象方法必须在抽象类中
      5.抽象类中不一定有抽象方法 
      6.抽象方法不能有private、static、final关键字
      7.若子类不想重写父类的抽象方法,可以将子类改为抽象类
      8.抽象方法在子类实现时访问权限必须大于等于父类方法

2.接口        

接口的概念

         1.Java只支持单重继承机制,不支持多重继承,即一个类只能有一个超类。单继承性使得Java结构简单,层次清楚,易于管理,更安全可靠,从而避免了 C++中因多重继承而引起的难以预测的冲突。但在实际应用中也需要使用多重继承功能。 但Java中并不允许多重继承,所以Java提供了接口(interface)来解决这类问题。

          2.接口是用来实现类似多重继承功能的一种结构,它在语法上和类很相似,它也有属性和方法,接口间也可以 形成继承关系,但接口和类有着很大的区别,它的属性都是常量,方法都是抽象方法,没有方法体,所以它的名 字也就称为“接口” 。接口只是一个口,里边是空的。 

接口的定义

        为了区分接口与类,Java采用了下面的语句来定义接口

修饰符 interface 接口名{

//        常量声明

//        方法签名

}

实例如下:
 

public interface InterfaceName {

}

        使用接口或多或少都有点想使用抽象类。例如:可以使用接口作为引用变量的数据类型或类型转换的结果等。与抽象类相似,不能使用new操作符创建接口的实例。

接口特点和接口继承:

        接口的特点:

  1. 没有构造方法,也不能显示定义构造器,不能实例化。
  2. 接口只能继承接口,不能继承类,而且接口支持多继承(类是单继承关系)

                     [修饰符] interface 接口名 extends 接口1,接口2

      3.接口里的方法全是抽象的,默认修饰符是public abstract

      4.接口里的字段全是全局静态常量,默认的修饰符是public static final

      5.接口里的内部类全是公共静态的,默认的修饰符是public static

        接口的继承;

        接口与接口之间的关系只能是继承(多继承)                使用extends来表示

        接口与实现类之间只能是实现关系                                    使用implements来表示

接口的实现者:实现类

        接口仅仅只是定义了某一事物一个具有某些功能,但是没有提供任何实现。

        此时,我们就要提供类,让该类去实现接口,并覆盖接口中的方法,从而实现接口中定义的功能。

        实现:class 类名 implements 接口{}

                    子类要实现接口的所有方法,否则接口就是抽象类

面向接口编程:

                接口 变量 = 创建实现类对象;

接口与抽象类的区别:
     

          相同点:

  • 都位于继承的顶端,用于被其他实现或继承
  • 都不能实例化
  • 都可以定义抽象方法,其子类/实现类都必须重写这些方法。

        不同

  • 接口没有构造方法,抽象类有构造方法
  • 抽象类可以包含普通方法和抽象方法,接口只能包含抽象方法
  • 一个类只能继承一个直接父类(可能是抽象类),接口是多继承的并且支持一个类多个接口
  • 成员变量:接口是默认public static final,抽象类是欧仁包权限
  • 方法:接口时默认public abstract,抽象类默认是默认包权限
  • 内部类:接口里欧仁是public static,抽象类默认是默认包权限
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值