栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java抽象类和接口的异同点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java抽象类和接口的异同点

目录

抽象类

定义

方法

变量

和普通类的区别

使用规则

接口

定义

方法

变量

使用规则

抽象类和接口的相同点

抽象类和接口的区别


抽象类

定义

有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来实现接口,它需要提供接口中所有声明的方法的实现

多继承

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

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

添加新方法

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/863230.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号