抽象类和接口
一.抽象类(abstract class)
声明抽象类的关键字是abstract
abstract 关键字可以用来修饰方法和类
抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明抽象类
-
修饰方法——抽象方法
public abstract void method();
只有方法的声明,没有方法的实现,它是让子类用方法重写来实现的
-
修饰类——抽象类
public abstract class Father{...}
不能用new关键字创建对象,它是用来让子类继承的
抽象类的的作用
子类继承抽象类------>子类必须实现抽象类没有实现的抽象方法 ,否则子类也要声明为抽象类
抽象类存在的意义
提高开发效率,但是用的少,用接口多
注意
抽象类不能用new创建对象,由子类实现,但是依然存在构造器
如下代码示例:
抽象父类中:
package com.xun.abstract_;
public abstract class Father {
public void method(){ //普通方法
}
public abstract void method1(); //抽象方法 只有方法的定义没有方法的实现
}
子类中:
package com.xun.abstract_;
public class Son extends Father {
@Override
public void method1() { //方法重写
System.out.println("实现抽象Father类的抽象方法");
}
}
二.接口(interface)
我们知道,普通类只有具体的实现,抽象类中具体实现(普通方法)和规范(抽象方法),接口只有规范,约束和实现分离——面向接口编程
1.声明接口的关键字是 interface
public interface UserServise{...} //定义一个Userservise接口
2.在接口中只能定义方法,不能实现方法
方法默认为(abstract)抽象方法,即void method();——>默认为 public abstract void method();
void add(); //增 默认(public abstract)void add();
void delate(); //删
void update(); //改
void query(); //查
3.接口中定义了方法后,由类重写方法实现
用关键字——implements
接口中
package com.xun.interface_;
public interface UserService {
void add(); //定义的方法(void method();)默认为 public abstract
void delate();
void update();
void query();
实现类(implements)中
package com.xun.interface_;
public class UserServiceImp implements UserService {
@Override
public void add() {
}
@Override
public void delate() {
}
@Override
public void update() {
}
@Override
public void query() {
}
}
可用implements实现多继承,即多个接口
public class UserServiseImp implements UserServise,TimeServise{...}
//定义UserServiseImp类来实现接口UserServise和TimeServise
在用implements实现接口后,必须重写接口中的方法,否则会报错
4.接口中有时也可定义属性(但是一般不在接口中定义属性)
在接口中定义的属性为常量,不能定义变量
默认 public static final
int Age =100; //默认 (public static final) int Age =100;