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

多继承

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

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

添加新方法

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值