抽象类
- 抽象类 :被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