复习9:抽象类

抽象类

抽象类是什么

简单地说,抽象类就是被abstract修饰的类


抽象类的作用

提取子类中的公共方法,但是不提供具体的实现


抽象类有什么

  • 构造器

  • 普通属性

  • 普通方法

  • 抽象方法(用abstract修饰的方法)

    • 使用abstract修饰方法
    • 没有方法体

注意1:抽象类与普通类的区别

  • 使用abstract修饰类
  • 多了抽象方法

注意2:抽象类虽然有构造器,但是不能用抽象类创建对象,其意义在于子类继承之后,由子类实现抽象类的抽象方法,从而体现多态(向上造型)。

注意3:抽象类的继承与普通继承一样具有传递性:如果子类不想实现父类的抽象方法,那么子类也可以成为抽象类,由下一代来实现(爷爷的愿望—>父亲无法完成—>孙子继承爷爷的愿望)


抽象类的简单示例

package day20191106;

public abstract class AbstrClass {
   	//普通变量
	int a;
	int b;
    
    //构造器
	public AbstrClass() {
		
	}
    
    //普通方法
	public void method() {
		
	}
    
    //构造方法
	public abstract void abstrMethod();
}

package day20191106;

public class Demo01 extends AbstrClass{

	@Override
	public void abstrMethod() {
		// TODO Auto-generated method stub
		
	}
	
}

关于抽象类的一些小tip

  • 抽象类不一定有抽象方法
  • 有抽象方法的类一定是抽象类
  • 抽象方法的意义在于被继承,而不是被调用
  • abstract不能和final一起使用
    • 被final修饰的类不能被继承、被final修饰的方法不能被重写,这与抽象类的意义冲突
  • 抽象类可以有构造器,但是不能被实例化
    • 通过子类的向上造型来实例化

接口

接口是什么

接口是特殊的抽象类,特殊之处如下:

  • 不使用abstract修饰,而使用interface修饰,且没有class关键字
  • 内部没有普通属性,只有常量(默认添加public、static、final,且只能在声明的同时初始化)
  • 内部没有普通方法,只能有抽象方法,且方法声明时不用写abstract和访问控制符,接口会默认给所有方法添加abstract和public(因此也不存在构造器)
  • 接口不能被继承,只能被子类实现

接口的意义

  • 规范动作
  • 扩展功能

接口的使用

  • 关键字:implements,表示当前类实现该接口

注意1:接口的实现与继承不同

  • 继承:一个子类只能继承一个父类
  • 接口:一个子类可以同时实现多个接口,一个接口也可以被多个子类实现

注意2:extends可以与implements一起使用,但是继承必须在实现接口之前

  • 所有类都默认继承了Object,即使是实现接口的子类也不例外

注意3:接口可以继承接口(extends),且一个接口可以继承多个接口

接口的简单示例

接口1

package day20191106;

//接口1
public interface InterClass1 {
	
	void method();
}

接口2

package day20191106;

//接口2
public interface InterClass2 {
	int a = 0;
	int b = 0;
	
	void method1();
	void method2();
	
}

子类同时实现接口1和接口2

package day20191106;

//子类同时实现接口1和接口2,如果有更多的接口需要实现,只需要用“,”分割多个接口
public class Demo02 implements InterClass1,InterClass2{

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void method2() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void method() {
		// TODO Auto-generated method stub
		
	}   
}

子类继承抽象类AbstrClass,同时实现接口1和接口2

package day20191106;

//extends与implements共同使用
public class Demo02 extends AbstrClass implements InterClass1,InterClass2{

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void method2() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void method() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void abstrMethod() {
		// TODO Auto-generated method stub
		
	}
	
}

接口继承接口

package day20191106;

import java.awt.event.KeyListener;
import java.awt.event.MouseListener;

//接口继承接口(一对多)
public interface InterClass1 extends MouseListener,KeyListener{
	
	void method();
}


对比

普通类、抽象类、接口的区别

普通类 抽象类 接口
构造器
普通属性
常量
普通方法
抽象方法
父、子类关系 extends extends implements
创建对象的方式 直接创建或者子类向上造型 子类向上造型 子类向上造型

继承与实现

继承extends 实现implements
类-类 1-1
类-接口 1-N
接口-类
接口-接口 1-N 1-N

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章