抽象类
如果父类中的方法不需要实现(没有方法体),而是由子类实现的,该方法就可以声明为抽象方法,抽象方法使用abstract 关键字修饰。
注意
- 如果某个类存在抽象方法,该类必须声明抽象类
- 如果一个类是抽象类,它里面的方法不一定是抽象方法
- 抽象方法,本质就是用来继承实现的
- 如果一个类,继承了抽象类,没有实现里面的抽象方法,则该类必须也声明为抽象类,由其子类继续实现。
- 抽象类无法实例化!!!
匿名内部类,来解决抽象类无法实例化问题
接口(interface)
java中的接口是一种特殊的抽象类,它里面的所有方法都没有实现
接口是可以多实现的,一定程度上,补全了Java单继承的缺点。
注意
- 接口中成员默认访问修饰符都是public,即便你不写!
- 一般接口中不写不同属性,写的要么是常量,要么是一些公共的变量(建议使用static修饰,方便访问)
- 接口中的方法,都是抽象方法,没有实现体。
- 因此接口就是一种特殊的抽象类
接口的实现类
如果要实现接口中定义的方法,则需要写一个实现类,该类实现该接口
格式
public class 子类 implements 接口 {
//需要实现所有该接口定义的方法
}
接口的命名规范
接口:IXxx 实现类:Xxx
接口:Xxx 实现类:XxxImpl
补充
在jdk 8.0之前,接口中,没有实现了的方法(所有的方法都是没有实现的)
8.0新特性
- 接口中可以存在默认方法(default 关键字来修饰)
- 也可以定义静态方法,也就是说此时接口就是一个工具类
实例
package com.openlab.ke.intreface;
public interface IUserDao {
public void login(String name,String password);
void reg(User user);
public void add(User user);
public boolean delete(User user);
public void update(User user);
public User[] list();
public User load(String username);
public default void test() {
System.out.println("jdk8.0 提供的默认方法");
}
public static String getSuffix(String path) {
return path.substring(path.lastIndexOf("." + 1));
}
}
package com.openlab.ke.intreface;
public class User {
}
package com.openlab.ke.intreface;
public class UserDao implements IUserDao {
@Override
public void login(String name, String password) {
// TODO Auto-generated method stub
}
@Override
public void reg(User user) {
// TODO Auto-generated method stub
}
@Override
public void add(User user) {
// TODO Auto-generated method stub
}
@Override
public boolean delete(User user) {
// TODO Auto-generated method stub
return false;
}
@Override
public void update(User user) {
// TODO Auto-generated method stub
}
@Override
public User[] list() {
// TODO Auto-generated method stub
return null;
}
@Override
public User load(String username) {
// TODO Auto-generated method stub
return null;
}
}