java基础篇 抽象类与接口

java基础篇 抽象类与接口,第1张

java基础篇 抽象类与接口  学习目标:

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4021288.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-22
下一篇 2022-10-22

发表评论

登录后才能评论

评论列表(0条)

保存