抽象类及接口相关知识点

抽象类

  • 相关概念
  • 抽象类 :被abstract修饰的类,称为抽象类。抽象类意为不完整的类、不够具体的类,抽象类对象无法独立存在,即不能new对象
    • 抽象类不能实例化,只能作为父类引用
    • 抽象类的构造方法的作用:构建子类对象时,先构建父类对象,由父类共性+子类独有组成完整的子类对象。
  • 可声明引用,更加纯粹的使用多态。
  • 抽象方法:用abstract修饰的方法,没有方法体,其访问修饰符不能用private,因为抽象方法需要被继承重写,默认的default也不宜用,虽然编译不会出错,但是如果父子类不在同一个包,则后患无穷。因此public以及protected可以使用,常用的是public。
    • 抽象方法中不能有final 以及static,因为final以及static不能只能继承而不能重写。
  • 作用
  • 抽象类的作用:
    • 可以被子类继承,提供共性属性以及方法
    • 可以声明引用,强制使用多态。
  • 抽象类的特点
  • 抽象方法只能存在抽象类之中,用abstract修饰。

  • 抽象类不能实例化,也就是不能new对象,只能作为引用,指向子类,即多态。

  • 子类必须实现父类中的抽象方法,否则子类也需要是抽象类。

  • 抽象类中可以写非抽象方法,普通的属性,静态的方法,构造方法。

  • 父类的普通方法,子类可以根据自己的需求是否重写。

  • 构造方法,静态方法,都不能用abstract修饰

  • 抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用

final

  • final修饰类
    • final修饰的类,表示该类不可以被继承
  • final修饰方法
    • final修饰方法,表示该方法不能被重写,只能被继承。

      static修饰的方法一样,只能继承,不能重写(覆盖)

  • final修饰属性
    • final修饰的属性即为常量,不能被修改,必须完成初始化。若不是静态常量,需要在声明时完成赋值,若是静态的常量,则在静态代码块之中赋值也行。
    • 常量的命名:全部字母大写,多个单词中间用下划线连接。
    • 常量的的特点:
      • 基本数据类型的常量,值不可变。
      • 引用型数据类型的常量,地址不可变。
public abstract class Animal {
	
	final double PI = 3.14;
	
	final static String name ;
	
	static {
		name = "af";
	}
	
	public void mb() {}
	
	
}
class Dog extends Animal{


	
	public final void mb() {}
	
}

接口

  • 概念及特点
    • 概念:intereface修饰,是一种能力,其方法是一种约束。
    • 接口代表的是一种能力,因此不能有构造方法
    • 接口不能直接new对象,只能作为引用,new子类的方式来创建对象。
    • 接口的实现类必须实现接口中的所有抽象方法,否则子类就是抽象类,或者也是接口。
    • 继承是单根继承,即一个子类只能有一个直接父类,但是可以通过继承多个接口的方式来实现多继承的效果。
    • 接口之间可以互相继承,并且,接口之间是多继承。接口的实现关键字为:implements。当实现类有继承关系时,先写继承,后跟着实现接口
    • 实现类可以实现多个接口,接口之间用 “ , ”隔开,所有接口值中的抽象方法都必须重写。
  • 接口的方法以及属性
    • 接口中的方法:

      • 而在**JDK7中接口只能有抽象方法,**不管是不是书写,都是 public abstracter修饰的

      • JDK8的版本之中,接口中可以定义普通方法,用default修饰,其格式为:

        public default void mb() {}

      • 在**JDK8的版本之中,也可以写静态的方法****,其格式为:
        public static void mc() {}

    • 接口中的属性

      • 接口中的属性默认为,公开的静态的常量,不写,也默认有:public static final
  • 接口与抽象类的区别
    • 不同:

      • 接口中的属性只能是公开静态常量(隐式使用public static final修饰)

      • 接口中的方法只能是公开抽象方法JDK7之前(隐式使用public abstract修饰)

      • 接口之中没有构造方法、没有动态代码块、没有静态代码块

      • jdk8之后,接口可以有静态的方法,和普通的方法,普通的方法必须用 default 修饰,(此处的default不是访问修饰符)

      • 一个类只能继承一个类,但却可以实现多个接口。

    • 相同:

      • 都可以有抽象方法

      • 不能创建对象。(接口不是类,不是模板的概念,也没有构造方法)

      • 都可以声明引用,通过new子类的方式得到实例。

      • 子类必须实现抽象方法

    • 适用场景:

      • 当你关注事物的本质,使用抽象类

      • 当你关注功能,使用接口

  • 常见的关系
    • ​ 类与类:单继承,extends父类名称
    • ​ 类与接口:多实现,implements 接口名称1,接口名称2,接口名称3
    • ​ 接口与接口:多继承,extends 父接口名称1,父接口名称2
  • 相关概念
  • 抽象类 :被abstract修饰的类,称为抽象类。抽象类意为不完整的类、不够具体的类,抽象类对象无法独立存在,即不能new对象
    • 抽象类不能实例化,只能作为父类引用
    • 抽象类的构造方法的作用:构建子类对象时,先构建父类对象,由父类共性+子类独有组成完整的子类对象。
  • 可声明引用,更加纯粹的使用多态。
  • 抽象方法:用abstract修饰的方法,没有方法体,其访问修饰符不能用private,因为抽象方法需要被继承重写,默认的default也不宜用,虽然编译不会出错,但是如果父子类不在同一个包,则后患无穷。因此public以及protected可以使用,常用的是public。
    • 抽象方法中不能有final 以及static,因为final以及static不能只能继承而不能重写。
  • 作用
  • 抽象类的作用:
    • 可以被子类继承,提供共性属性以及方法
    • 可以声明引用,强制使用多态。
  • 抽象类的特点
  • 抽象方法只能存在抽象类之中,用abstract修饰。

  • 抽象类不能实例化,也就是不能new对象,只能作为引用,指向子类,即多态。

  • 子类必须实现父类中的抽象方法,否则子类也需要是抽象类。

  • 抽象类中可以写非抽象方法,普通的属性,静态的方法,构造方法。

  • 父类的普通方法,子类可以根据自己的需求是否重写。

  • 构造方法,静态方法,都不能用abstract修饰

  • 抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用

final

  • final修饰类
    • final修饰的类,表示该类不可以被继承
  • final修饰方法
    • final修饰方法,表示该方法不能被重写,只能被继承。

      static修饰的方法一样,只能继承,不能重写(覆盖)

  • final修饰属性
    • final修饰的属性即为常量,不能被修改,必须完成初始化。若不是静态常量,需要在声明时完成赋值,若是静态的常量,则在静态代码块之中赋值也行。
    • 常量的命名:全部字母大写,多个单词中间用下划线连接。
    • 常量的的特点:
      • 基本数据类型的常量,值不可变。
      • 引用型数据类型的常量,地址不可变。
public abstract class Animal {
	
	final double PI = 3.14;
	
	final static String name ;
	
	static {
		name = "af";
	}
	
	public void mb() {}
	
	
}
class Dog extends Animal{


	
	public final void mb() {}
	
}

接口

  • 概念及特点
    • 概念:intereface修饰,是一种能力,其方法是一种约束。
    • 接口代表的是一种能力,因此不能有构造方法
    • 接口不能直接new对象,只能作为引用,new子类的方式来创建对象。
    • 接口的实现类必须实现接口中的所有抽象方法,否则子类就是抽象类,或者也是接口。
    • 继承是单根继承,即一个子类只能有一个直接父类,但是可以通过继承多个接口的方式来实现多继承的效果。
    • 接口之间可以互相继承,并且,接口之间是多继承。接口的实现关键字为:implements。当实现类有继承关系时,先写继承,后跟着实现接口
    • 实现类可以实现多个接口,接口之间用 “ , ”隔开,所有接口值中的抽象方法都必须重写。
  • 接口的方法以及属性
    • 接口中的方法:

      • 而在**JDK7中接口只能有抽象方法,**不管是不是书写,都是 public abstracter修饰的

      • JDK8的版本之中,接口中可以定义普通方法,用default修饰,其格式为:

        public default void mb() {}

      • 在**JDK8的版本之中,也可以写静态的方法****,其格式为:
        public static void mc() {}

    • 接口中的属性

      • 接口中的属性默认为,公开的静态的常量,不写,也默认有:public static final
  • 接口与抽象类的区别
    • 不同:

      • 接口中的属性只能是公开静态常量(隐式使用public static final修饰)

      • 接口中的方法只能是公开抽象方法JDK7之前(隐式使用public abstract修饰)

      • 接口之中没有构造方法、没有动态代码块、没有静态代码块

      • jdk8之后,接口可以有静态的方法,和普通的方法,普通的方法必须用 default 修饰,(此处的default不是访问修饰符)

      • 一个类只能继承一个类,但却可以实现多个接口。

    • 相同:

      • 都可以有抽象方法

      • 不能创建对象。(接口不是类,不是模板的概念,也没有构造方法)

      • 都可以声明引用,通过new子类的方式得到实例。

      • 子类必须实现抽象方法

    • 适用场景:

      • 当你关注事物的本质,使用抽象类

      • 当你关注功能,使用接口

  • 常见的关系
    • ​ 类与类:单继承,extends父类名称
    • ​ 类与接口:多实现,implements 接口名称1,接口名称2,接口名称3
    • ​ 接口与接口:多继承,extends 父接口名称1,父接口名称2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值