Java抽象类与接口


前言

抽象概述:
abstract:关键字,用于修饰方法和类,为抽象方法和抽象类。

  • 抽象方法:不同类的方法是相似,但是具体内容又不太一样,所以我们只能抽取他的声明,没有具体的方法体,没有具体方法体的方法就是抽象方法
  • 抽象类:有抽象方法的类必须是抽象类
  • 注意:一个类继承了抽象类需要重写他所有的抽象方法,否则这个类就得是抽象类

接口概述(interface) • 定义:是抽象方法和常量值的集合

  • 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
  • 格式:interface 接口名{}
  • 接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。(implements)

一、抽象类的特点:

  •  抽象方法只能在抽象类里面
    
  •  抽象类和抽象方法必须被abstract修饰
    
  •  抽象类不能创建对象(不能实例化),不可以用new创建对象
    
  •  抽象类中可以有非抽象的方法
    
  •  抽象类和类的关系也是继承
    
  •  一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类
    
  • 特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象,只提供子类完成调用。
    

二、抽象类代码

代码如下(示例):

abstract class Animal {
	public abstract void eat();
	//非抽象方法子类可以不重写
	public void run() {	
	}
}
class Cat extends Animal {
	@Override
	public void eat() {
		System.out.println("猫吃鱼");
	}
}
abstract class Dog extends Animal { //这还是个抽象方法,这是上面说到的特殊点
	public void eat() {
		System.out.println("狗吃屎");
	}
}

三、抽象类的成员特点:

成员变量
1.可以有变量
2.可以有常量

构造方法
1.可以有构造方法

成员方法
1.可以有抽象方法
2.可以有非抽象方法


四、接口的成员:

• 接口中的成员修饰符是固定的
– 成员常量:public static final
接口里面定义变量是全局常量,而且上面三个关键字都可以省略,而且只能是 public static final
– 成员函数:public abstract
接口里面定义的方法都是抽象的,而且上面的两个关键字也是可以省略的
– 接口中的成员都是public的
接口的成员特点:

  •  只能有抽象方法
    
  •  只能有常量
    

五、抽象类的特点:

• 接口是对外暴露的规则。
• 类与接口的关系是实现。
• 接口的出现降低耦合性。(实现了模块化开发,定义好规则,每个人实现自己的模块,大大提高了开发效率)。

六、继承与实现的定义及区别:

继承和实现

– 类与类之间称为继承:因为该类无论是抽象的还是非抽象的,它的内部都可以定义非抽象方法,这个方法可以直接被子类使用,所以子类继承就可以应用了。
– 类与接口是实现关系:因为接口中的方法都是抽象的,必须由子类实现才可以实例化,所以就用了这个关键字implements。
– 接口与接口之间是继承关系:一个接口可以继承另一个接口,并添加新的属性和抽象方法,并且接口可以多继承。

public class 类名 extends 父类 implements 接口1,接口1

单继承和多实现

类只能单继承,而接口可以多实现。
• java将多继承机制进行改良,通过多实现接口的形式来体现。
• 为什么不支持多继承呢? • 因为你继承的多个父类中定义了相同的方法,而方法内容不
同,jvm无法判断选择哪个父类的方法,有安全隐患。
• 而多实现就没有这个问题,即使是多个接口中都有相同的方法,但是他们都没有方法体
• 多实现的好处,一个类继承另一个类的同时可以实现多个接口,扩展了功能。
• 接口的出现打破了单继承的局限性。

总结

1.抽象关键字abstract不可以和哪些关键字共存?
final:修饰类、成员变量、成员方法 以及private:私有的。

2.抽象类中是否有构造函数?
有,因为也可以拥有非抽象的方法,以及属性等。

3.抽象类中可不可以没有抽象方法?
可以,这样只是为了不给创建该类实例,只能通过子类来创建调用。
4.接口与抽象类
• 共 性:都是不断抽取出来的抽象的概念
• 区别 1: –与类的关系(接口只有抽象方法,实现)
• 区别 2: –成员变量
–成员方法(接口只有常量)
–构造方法(接口没有构造方法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值