java基础篇 抽象类与接口

本文介绍了抽象类和接口在Java中的概念、特点和使用。抽象类用于解决类继承时方法重写的繁琐问题,不能被实例化,而接口则提供了一种多继承的机制,允许类实现多个接口。接口中所有方法默认为抽象的,且包含常量。两者的主要区别在于抽象类描述的是“是不是”的关系,接口描述的是“有没有”的关系,Java中类单继承而接口可多继承。
摘要由CSDN通过智能技术生成

 学习目标:

1、了解接口和抽象类的发展过程;

2、掌握抽象类与接口的特点;

3、掌握抽象类与接口的构成;

4、举实例说明。

5、分析两者的区别。


学习内容:

一、抽象类

1.1抽象类的产生

通过先前的学习,我们了解到类由属性和方法构成;类的继承中,子类会继承父类的属性和方法。有时候,子类要实现的方法与父类不同,此时,虽然子类可以重写父类方法,但当继承子类特别多时,每个子类都要重写父类方法,过于繁琐,且父类方法不再重要。那么,我们是不是可以不写父类具体的具体的方法体呢?这就是抽象类的由来。

1.2抽象类的特点(抽象方法)

1.2.1抽象类的特点,在于abstract(抽象)二字上。abstract修饰的方法的被称为抽象方法,这类方法不需要具体的方法体。形如 【修饰符】abstract 返回值类型 方法名(【参数列表】);

拥有抽象方法的类被称为抽象类,抽象类也需要用到abstract修饰。【修饰符】abstract 类名class{}

1.2.2抽象类不能实例化

抽象类由于含有抽象方法,所以他不能直接被实例化。子类继承后,重写抽象方法后,才可以实例化该子类。

1.2.3抽象类中除了抽象方法外,还可以有其他方法;

public abstract Book{
   String name;
   int price;
   public abstract void read();
}


public EnglishBook extends Book{
   public void read(){
       System.out.println("读英语书");
   }
}


public class test{
   public static void main(String[] args){
   EnglishBook english = new English();
   english.read();
   }

}

二接口

2.1接口的来历

我们知道抽象类是由于类中含有抽象方法,那么我们可不可以定义一个只有抽象方法的类。

这个只有抽象方法的类被称为接口。

2.2接口的特点

2.2.1接口中没有普通方法,全为抽象方法,默认修饰符为 public abstrace。 jdk8以后,接口中引入了默认方法和静态方法(又称类方法),下文中详细接收。

2.2.2 接口的属性全为final修饰的常量!!!默认修饰符为 public static final

2.2.3 接口的定义不再使用class,而改为interface定义

2.2.4子类使用implement继承接口。同时可以继承多个父接口,这就解决了子类只能继承一个父类的问题,使子类的形成,更加便利。

2.2.5子接口也可以同时继承多个父接口,子接口使用extends继承父接口。

2.3常见的接口定义形式

 [修饰符] interface 接口 [extends 父接口1,父接口2]{
         //常量一定要进行初始化

        【public】【static】【final】常量类型 常量名 = 常量值;
        【public】【abstrace】方法返回值类型 方法名(【参数列表】);
         [public] default 方法返回值类型 方法名([参数列表]){ //默认方法的方法体};
         [public] static 方法返回值类型 方法名(参数列表}){//静态方法的方法体} 

} 

举例

interface Animal{
    //定义常量
    String name ="Animal";
    //定义抽象方法
    public abstract void breath();
}


interface dog extends Animal{
     public abstrace void eat();
}


class hashiqi  implements dog{
     public void breath(){ System.out.println("动物都会呼吸.");}
     public void eat(String foot){System,out.println("狗狗吃"+foot);}
}

class test{
  public static void mian(String args){ 
     hashiqi erha = new hashiqi();
     System.out.println(erha.name);
     erha.eat("骨头");
     erha.breath();
  }
}

 2.4静态方法

2.4.1静态方法默认用 static修饰;

2.4.2静态方法允许有方法体;

2.4.3静态方法可以通过 接口.方法名 直接进行调用。有时候程序员希望,在不创建实例对象的情况下,就可以调用接口的某个方法,这时候 静态方法就显得即为重要。 当然,静态方法也可以通过接口的实现类的实例对象来调用;

2.5默认方法

2.5.1接口中的默认方法同父类的方法一样,可以有方法体

2.5.2 默认方法可以被子类重写;

2.5.3默认方法使用default修饰;

2.5.4默认方法只能通过接口的实现类的实例对象来调用。

三 接口和抽象类的区别

1 “有没有”和“是不是”

接口可以多继承,也就是可以有多个接口供子类“有没有“去选择继承;

public interface Sleep {
	public static int a = 1;
	public static int b = 2;
	public void ioSleep(int i);
 
}

 

public interface Eat {
	public abstract void ioEat();
}

 

public interface Study {
	public void ioStudy();
}

 

public class Cat implements Sleep,Eat{
 
	@Override
	public void ioSleep(int i) {
		System.out.println("我是猫,我每天都不用睡觉!!!");
	}
 
	@Override
	public void ioEat() {
		System.out.println("我是猫,我吃猫粮!!!");
	}
}

 

public class Person implements Sleep,Eat,Study{
 
	@Override
	public void ioStudy() {
		System.out.println("我是人,我每天都要学习");
	}
 
	@Override
	public void ioEat() {
		System.out.println("我是人,我要吃大鱼大肉还要喝酒");
	}
 
	@Override
	public void ioSleep(int i) {
		System.out.println("我是人,我每天要睡24小时");
	}
}

 

而抽象类是单继承,抽象类的多种方法是让子类是不是;

1.抽象类描述的是“是不是”的问题,而接口描述的是“有没有”的问题;
2.在Java中类的继承是“单继承”,可以“多对一”,但是不允许“一对多”。而一个类却可以同时实现多个接口;

3.2

abstract classInterface
定义abstract class关键字Interface关键字
继承抽象类可以继承一个类和实现多个接口;子类只可以继承一个抽象类接口只可以继承接口(一个或多个);子类可以实现多个接口
访问修饰符抽象方法可以有publicprotecteddefault这些修饰符接口方法默认修饰符是public。你不可以使用其它修饰符
方法实现可定义构造方法,可以有抽象方法和具体方法接口完全是抽象的,没构造方法,且方法都是抽象的,不存在方法的实现
实现方式子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
作用了把相同的东西提取出来,即重用为了把程序模块进行固化的契约,是为了降低偶合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值