抽象
什么是抽象
举例:
将猫和狗的共性内容,抽取到了动物(本身就是统称,概括性的)了中,比如:吃和睡的功能,但是在动物了中将吃和睡给出了具体体现,只有看到具体的事物才能知道它具体吃和睡的行为!所以在父类将这些行为,只是给出一个方法声明即可!
仅仅给出方法的声明---->含义没有方法体{},抽象功能---->
有抽象的方法的必须为抽象类
抽象类中不一定都是抽象方法!(部分的功能,抽象功能,必须让子类必须重写!)
抽象方法(成员方法)的格式:
权限修饰符 abstract 返回值类型 方法名(空参/带参) ;
抽象类的本质:
强制子类必须将父类的所有的抽象方法,必须实现(重写)
抽象类的特点:
1)不能实例化(不能new 创建对象)
2)抽象类的子类一定有具体类,否则无法进行实例化的!
抽象类的成员特点:
1)成员变量:
可以是变量也可以自定义的常量
2)成员方法
既可以有抽象方法,也可以有非抽象方法!
3)构造方法
还存在继承关系,分层初始化--->先父类构造初始化,然后是子类构造初始化!
无参构造方法/有参构造方法都可以存在,目的都是为了数据进行初始化!
抽象abstract关键字不能和哪些关键字共存?
abstract不能和private共用:
被private修饰的只能在当前类访问,而abstract修饰的方法,它需要强制子类进行重写;
abstract不能和static共用:
abstract修饰的成员方法,需要被子类重写,还是抽象类多态进行实例化Fu fu = new Zi() ;
而static随着类的加载而加载(静态方法算不上重写),跟类相关的!
abstract不能和final共用:
被final修饰的成员方法不能被重写,而abstract修饰的成员方法,强转子类重写!
abstract:用在类上,标记这个类----抽象类
用在方法上,标记这个方法是一个抽象方法!
结合public使用居多
接口
举例:
猫或者狗本身这个事物不具备"跳高"的功能,经过后天 驯养员的培养,猫和狗就具备了"跳高的功能"
接口体现的是这个事物本身不具备的功能,是一种额外的扩展功能! 只要这个事物实现了接口,它就具备这个功能!
如何定义接口
java定义接口
interface 接口名{}
接口的子类(子实现类) implements 接口名{
强制子实现类必须将接口中所有抽象方法必须重写!(实现)
}
接口的特点:
1)接口不能实例化(不能创建对象)
2)接口如何实例化?
接口多态
接口名 对象名 = new 接口的子实现类名() ; (前提:子实现类是非抽象的,就是一个具体类)
开发中:
接口名和子实现类的命名规范(开发项目中)
举例:
接口名: interface Inter{}
接口的子实现类命名: 接口名 +Impl
class InterImpl implements Inter{}
接口中的成员特点:
成员变量:只能是常量 存在默认修饰符 public static final
成员方法:(非静态):只能是抽象方法,存在默认修饰符 public abstract
在接口中是可以定义静态方法,必须有方法体(特例)
构造方法: 没有构造方法! 因为子实现类和接口的关系是implements实现关系,
只是将接口暴露的额外功能进行实现
interface Inter{
/*public Inter(){
}*/
// public int num = 10 ;
public static final int num = 10 ;
//public static int num2 = 20 ;
public static final int num2 = 20 ;
/*void show(){//接口只能抽象方法
}*/
public abstract void show() ;
void show3() ;
//静态方法
public static void show2(){
System.out.println("show2()...");
}
}
//接口的子实现类 InterImpl实现Inter接口
class InterImpl implements Inter{
int num = 100 ;
@Override
public void show() {
System.out.println("show InterImpl");
}
@Override
public void show3() {
System.out.println("show3 InterImpl");
}
}
//测试类
public class InterfaceDemo2 {
public static void main(String[] args) {
//接口多态的测试
Inter inter = new InterImpl() ;
System.out.println(inter.num) ;//多态的成员变量的访问
System.out.println(Inter.num);
// inter.num = 200 ;
System.out.println(Inter.num2) ;
//inter.num2 = 300 ; final修饰的变量是一个常量,不能在赋值
Inter.show2();
}
}
在Java中
类与类:
继承关系,extends,而且只支持单继承,不支持多继承,但是可以多层继承!
类与接口
实现关系,implements,而且一个类继承另一个类的同时,是可以实现多个接口的!接口名和接口名直接逗号隔开
class LoverImpl extends Lover implements Love,Study{
接口与接口
继承关系,extends,不仅支持单继承,也支持多继承,也可以多层继承