Java抽象类和接口的异同点

本文详细介绍了抽象类和接口在Java中的定义、方法、变量、使用规则及其区别。抽象类可以包含抽象方法和具体方法,而接口仅能包含抽象方法。子类继承抽象类必须实现其所有抽象方法,而实现接口同样需要提供接口中所有方法的实现。此外,接口可以多继承,但抽象类不能。两者都不能被实例化,但抽象类可以实现接口。在选择使用抽象类还是接口时,应考虑其在多继承和方法实现上的不同需求。
摘要由CSDN通过智能技术生成

目录

抽象类

定义

方法

变量

和普通类的区别

使用规则

接口

定义

方法

变量

使用规则

抽象类和接口的相同点

抽象类和接口的区别


抽象类

定义

有abstract修饰的类,我们称之为抽象类

如:abstract class Test{};

方法

抽象类可以有具体方法和抽象方法,通过把类或者类中的方法声明为abstract来表示一个类是抽象类

抽象方法如:abstract void play();

变量

和普通类一样

有抽象方法的类一定为抽象类,抽象类不一定有抽象方法。

抽象类是可以有私有方法或私有变量的。

和普通类的区别

  1. 不能创建对象
  2. 一般类继承了抽象类必须实现抽象方法
  3. 抽象方法修饰词只能是public或者protected

使用规则

  1. 子类不能通过super关键字调用父类的抽象方法

E.g:

abstract class AA
{
	public abstract void B();
}
class CC extends AA
{
	public void B()
	{
		System.out.println("you are right!");
	}
}
public class yt2 {

	public static void main(String[] args) {
		AA a = new CC();
		a.B();
	}
}
//输出:you are right!
//被调用的是覆写后的方法

接口

定义

非常抽象的类型,类型为Interface修饰

如:(public) Interface Test(){};

方法

必须为抽象方法。修饰词必须为public abstract

变量

修饰词必须为 public static final

接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字Interface实现。

使用规则

1.对于接口的子类(不是抽象类)必须覆写接口中的全部抽象方法,之后可以利用子类的向上转型通过实例化子类来得到接口的实例化对象

E.g:

interface Person

{

public static final String aa="taotao!";

public abstract void print();

}

interface Studen

{

public abstract String getName();

}

class Teacher implements Person,Studen

{

public String getName()

{

return Person.aa;

}

public void print()

{

System.out.println(Person.aa);

}

}

public class yt3 {



public static void main(String[] args) {

Person bb = new Teacher();

bb.print();



Studen cc = (Studen)bb;

System.out.println(cc.getName());

}



}

//输出:taotao!

//      taotao!

2.当一个子类既需要实现接口,又需要继承抽象类时,应先使用关键字extends继承一个抽象类,然后使用关键字 implements 实现多个接口

E.g:

interface Person

{

public void print();

}

abstract class Name

{

public abstract void getName();

}

class Teacher extends Name implements Person

{

public void print()

{

System.out.println("taotao!");

}

    @Override

    public void getName()

    {

        System.out.println("tao!");

    }

}

public class yt3 {



public static void main(String[] args) {

Person bb = new Teacher();

bb.print();



Name cc = new Teacher();

cc.getName();

}



}

//输出:taotao!

//      tao!

3.抽象类是可以通过implements关键字实现接口的,但是接口不可以通过extends关键字继承抽象类的

4.接口不能通过extends关键字继承抽象类,但是可以通过extends关键字来继承多个接口

interface Teacher extends Name,Person{}//Name和Person都是接口

抽象类和接口的相同点

  1. 都不能被实例化(不能new)
  2. 接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化
  3. 未能实现抽象类或接口中的所有方法时,抽象类子类或接口实现类都必须是抽象类

抽象类和接口的区别

参数

抽象类

接口

关键字

Abstract class

interface

修饰符

可以是Public、protected、default

只能是public

方法

既可以含普通方法,也可以含抽象方法

只能含抽象方法,且必须是public的

构造器

可以有构造器

不能有构造器

实现

子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现

子类使用关键字implements来实现接口,它需要提供接口中所有声明的方法的实现

多继承

抽象方法可以继承一个类和实现多个接口

接口只可以继承一个或多个其它接口

添加新方法

如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码

如果你往接口中添加方法,那么你必须改变实现该接口的类

抽象类接口C#中有以下异同: 相同: 1. 都不能被实例化,只能通过实现它们的子类或实现类来创建对象。 2. 子类或实现类必须实现抽象类接口中的所有方法才能被实例化。 3. 可以被其他类继承或实现。 异同: 1. 抽象类是特殊的类,可以包含成员变量、方法、属性等,而接口只能包含方法、属性、事件和索引器的声明。 2. 一个类只能继承一个抽象类,但可以实现多个接口。 3. 抽象类可以有方法的实现,而接口只能有方法的声明。 4. 抽象类可以有字段和构造函数,而接口不能有字段和构造函数。 5. 接口可以被其他接口继承,形成接口的继承链,而抽象类不能被继承。 总结来说,抽象类更适合用于定义一些具有共同特征的类的基类,而接口更适合用于定义一些行为的规范,使得不同的类可以实现这些规范。 #### 引用[.reference_title] - *1* [Java抽象类接口异同](https://blog.csdn.net/m0_64742984/article/details/124610167)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C# 抽象类接口异同](https://blog.csdn.net/Monkey_Xuan/article/details/115915086)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值