1.抽象类
抽象类的概念:每一个动物的吃和睡的功能不一样,不应该把动物类定义为一个具体类,而是给出一个声明(abstract),当一个类中如果有抽象功能(抽象方法),那么这个类一定要定义为抽象类。
<一个抽象类中可以有抽象方法也可以有非抽象方法>
2.抽象类的子类的特点:
a、抽象类的子类是抽象类,那么没有意义,最终使用的就是通过子类进行初始化的,如果子类都被抽象修饰了,那么也不能创建对象,所以没有意义。
b、抽象类不能实例化,抽象类不能创建对象
* 一个抽象类如何进行实例化?
答:通过抽象类多态的形式,父类的引用指向子类对象,通过子类进行初始化。
* 抽象类多态:通过子类必须重写当前抽象的父类中的所有抽象方法,还可以提高代码的维护性。
3.抽象类的成员特点:
成员变量:可以是变量也可以是自定义常量
构造方法:抽象类可以有构造方法(包括有参构造和无参构造)
作用:通过抽象类的多态的形式,让子类进行数据的初始化。
成员方法:可以有抽象方法也可以有非抽象方法。(抽象方法是没有方法体的方法)
abstract class Student{
public void show(){
Syetem.out.println("ssy");
//有大括号包起来的方法体是具体方法
}
public abstract void show(); //没有方法体的是抽象方法,此时该类不是抽象类会报错,应该给类中加上abstract声明
4.抽象类成员方法的特性:
抽象方法:强制子类要做的第一件事,方法重写(覆盖)。
非抽象方法:提高代码的复用性。
一个类中没有抽象方法,这个类也可以定义为抽象类,不能让其创建对象。
5.abstract不能和哪些关键字共同使用?
private final static(静态方法算不上方法重写) 不能和abstract一起使用,非法修饰报错,编译不通过。
实际开发中使用public或着protected来修饰。
6.接口(面向接口编程)
接口体现的是一种扩展功能,比如猫可以调高可并不是所有的猫都可以跳高。接口里的代码尽量越少越好。
接口的表示:interface 接口名{ }
接口的特点:不能是实例化(不能创建对象),那么接口如何进行实例化?
接口子实现类: a、接口的子实现类是抽象类:没有意义,子类都不能创建对象了。
b、接口的子实现类是非抽象类:接口的实例化通过子实现类对接口数据初始化。
接口成员的特点:a、成员变量:只能是常量,存在默认修饰符:public static final(永远建议自己给出)
b、构造方法:接口没有构造方法
c、成员方法:接口中的成员方法默认修饰符:public abstract(建议自己给出)
//定义跳高的接口
interface Jump{
//非抽象方法:抽象类中不能有抽象方法
// public void jump(){
// System.out.println("猫可以跳高...");
// }
public abstract void jump() ;
//构造方法:不能有
// public Jump(){
//
// }
}
//子实现类是抽象类类
//abstract class Cat implements Jump{
//子实现类是非抽象类
class Cat implements Jump{
@Override
public void jump() {
System.out.println("猫可以跳高...");
}
}
//测试类
public class InterfaceDemo {
public static void main(String[] args) {
//创建接口对象
//Jump j = new Jump() ;//接口不能实例化
//接口多态:接口的引用指向子实现类对象
Jump j = new Cat() ;
j.jump();
}
}
7.接口的子实现类和接口的关系:implements
格式:class 子实现名 implements 接口名
类与类的关系:继承关系 extends
类与接口的关系:实现关系 implemes ,并且一个类在继承另一个类的同时,可以实现多个接口。
class 子实现类名 extends Object implements 接口名1,接口名2
接口与接口关系,继承关系 extends ,可以实现单继承也可以实现多继承。
8.接口与抽象类的区别
成员的区别:a、成员变量:
抽象类:成员变量可以是常量也可以是变量。
接口: 成员变量只能是一常量,存在默认修饰符 public static fianl
b、构造方法:
抽象类:可以无参构造也可以有参构造(通过子类进行数据初始化即通过子类创建对象)
接口: 没有构造方法
c、成员方法:
抽象类:可以有抽象方法也可以有非抽象方法
接口:只能是抽象方法 public abstract
关系的区别:
类与类的关系:继承关系 extends
类与接口的关系:实现关系 implemes ,并且一个类在继承另一个类的同时,可以实现多个接口。
接口与接口关系,继承关系 extends ,可以实现单继承也可以实现多继承。
7.接口的子实现类和接口的关系:implements
格式:class 子实现名 implements 接口名
类与类的关系:继承关系 extends
类与接口的关系:实现关系 implemes ,并且一个类在继承另一个类的同时,可以实现多个接口。
class 子实现类名 extends Object implements 接口名1,接口名2
接口与接口关系,继承关系 extends ,可以实现单继承也可以实现多继承。
8.接口与抽象类的区别
成员的区别:a、成员变量:
抽象类:成员变量可以是常量也可以是变量。
接口: 成员变量只能是一常量,存在默认修饰符 public static fianl
b、构造方法:
抽象类:可以无参构造也可以有参构造(通过子类进行数据初始化即通过子类创建对象)
接口: 没有构造方法
c、成员方法:
抽象类:可以有抽象方法也可以有非抽象方法
接口:只能是抽象方法 public abstract
关系的区别:
类与类的关系:继承关系 extends
类与接口的关系:实现关系 implemes ,并且一个类在继承另一个类的同时,可以实现多个接口。
接口与接口关系,继承关系 extends ,可以实现单继承也可以实现多继承。
引用数据类型:
具体类:如果形式参数是一个具体类,那么需要创建该类对象。
抽象类:如果形式参数是抽象类的情况,那么需要自定义一个抽象的子类来进行实例化(创建对象)
接口:方法的形式参数是一个接口,那么需要创建接口的子实现类对象(多态实例化)
返回值:
具体类:直接返回该类对象(通常实际开发中使用匿名对象)
抽象类:返回的是该抽象类的子类对象。
接口:需要返回该接口的子实现类对象(通过子实现类进行实例化)