Java——抽象类和接口

我是研究僧i 提交于 2020-01-06 22:10:54

一、抽象类

  1. abstract修饰的类叫做抽象类
  2. 特点:
  • 不可以实例化对象(通过向上转型 类的继承)
  • 类中可以定义抽象类的方法(继承类必须重写抽象的方法)
  • 抽象类中可以没有抽象方法
  1. demo
public abstract class Animal {//抽象类
	private int num;
	public ...
}

二、抽象方法

  1. abstract修饰的方法叫做抽象方法,抽象方法只有方法的声明而没有方法的实现(没有方法体),包含抽象方法的类本身必须被声明为抽象的
  2. demo
public abstract class Animal {
	private int num;
	public abstract void shout();//由abstract修饰,没有方法体
}

三、抽象类的继承

  1. 派生类继承抽象类必须实现抽象类中所有抽象的方法,否则派生类也必须定义为抽象类
  2. demo
pubilc class Dog extends Animal {
	public void shout() {
		System.out.println("woof");
	}
}

public abstract class Cat extends Animal {//由于没有实现抽象方法,所以把这个类定义为抽象类
}

public class PersianCat extends Cat { //Cat是没有实现抽象方法的抽象类
	public void shout() {//实现抽象类方法
		System.out.println("meow");
	}
} 

四、接口

  1. 作用:用来增加一些额外的功能,接口中并不给出具体实现,要由继承这个接口的类来实现这些功能
  2. 接口的意义:
  • 弥补java中单继承机制的不足。
  • 接口中只有方法的声明没有方法的实现(都是抽象方法),这些方法在不同的地方被不同的类实现,而这些功能可以具有不同的行为(功能)
  1. 接口是一系列方法的声明,是一些方法特征的集合,接口可以看做是一种特殊的抽象类,其中包含常量和方法的声明,没有变量和方法的实现
  2. 特点
  • 一个类可以同时实现多个接口
  • 一个接口可以被多个无关的类实现‘
  • 一个类实现接口必须实现接口中所有的抽象方法,否则必须定义为抽象类(同抽象类的继承)
  1. 语法
    interface 接口名称 {
    - 接口中的变量声明
    - 接口中的抽象方法声明//可以没有abstract修饰
    }

    public class 类名 implements 接口1 接口2 …{
    // 实现接口中的方法
    }

  2. 接口的继承

  • 接口可以继承接口,与类的继承理念一致:一个接口继承一个父接口会继承父接口中定义的所有方法和属性
  • java中接口的继承是多继承制,即一个接口可以同时继承多个接口(区分类的继承——只能有一个父类)
  1. demo
interface Compare {
	public int compareTo(Object other);//声明抽象方法,可以没有abstract修饰
}

public Employee implements Compare {
	public int conpareTo(Object other) {//实现抽象方法
		//方法体
	}
}

五、抽象类和接口总结

  1. 抽象类:
  • 不能实例化,但是可以声明抽象类的引用
  • 包含抽象方法的类必须定义为抽象类
  • 不包含抽象方法的类不一定不是抽象类(抽象类中可以不包含抽象方法)
  • 抽象方法不含方法体,必须显示定义为abstract
  • 抽象方法的派生类必须实现基类的所有抽象方法
  1. 接口
  • 弥补java单继承的不足
  • 不能实例化,但是可以声明接口变量
  • 包含常量和方法的声明,不含变量和方法的实现(
    - 常量可以没有final的修饰,必须初始化,在接口实现类中不能修改值;
    - 方法可以没有abstract修饰,在接口实现类中必须实现;
    - static和default方法中有方法体)
  • 接口中的抽象方法不能有方法体(即便是空的方法体{ }也不行)
  • 接口不能继承类
  • 接口中可以继承(extends)多个接口(","分隔开)
  • 一个类可以实现(implements)多个接口(","分隔开)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!