抽象类
//abstract 抽象类
//extends:是单继承 但是接口可以多继承
public abstract class Action {
//约束->有人帮我们实现
//abstract 抽象方法 只有方法名字,没有方法的实现
public abstract void doSomething();
//1.不能new抽象类,只能靠子类去实现它(约束)
//2.抽象类中可以写普通方法
//3.抽象方法必须在抽象类中
//抽象的抽象:约束
//思考题:抽象类有构造器吗?存在的意义是什么?
}
//抽象类的所有方法,继承了它的子类,都必须要实现它的方法
//除非子类也是抽象类,要它的子子类来实现
public class A extends Action {
@Override
public void doSomething() {
}
}
思考题:抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super()或super(参数列表)调用抽象类中的构造方法。
接口
//抽象的思维->Java的精髓
//interface 定义的关键字,接口都需要有实现类
public interface UserService {
//接口中的所有定义其实都是抽象的 public abstract
//(public abstract) void run(String name);
//常量 public static final
int AGE = 99;
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
public interface TimeService {
void time();
}
//抽象类: extends
//类 可以实现接口 implements 接口
//实现了接口的类,就需要重写接口中的方法
//多继承->利用接口实现多继承
public class UserSeriveImpl implements UserService,TimeService{
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
@Override
public void time() {
}
}
接口的作用:
1.定义一些约束
2.定义一些方法,让不同的人实现,即不同的方法实现相同的功能
3.接口中的方法都是默认public static字段
4.接口中的变量都是常量,即默认public static final字段
5.接口不能被实例化,接口没有构造方法
6.可以使用implements实现接口,也可以实现多个接口
7.实现接口必须重写接口中的方法
内部类
成员内部类
public class Outer {
private int id = 10;
public void out(){
System.out.println("这是外部类的方法");
}
public class Inner{
public void in(){
System.out.println("这是内部类的方法");
}
//获得外部类的私有属性
public void getID(){
System.out.println(id);
}
}
}
public class Application {
public static void main(String[] args) {
//new
Outer outer = new Outer();
//通过这个外部类来实例化内部类
Outer.Inner inner = outer.new Inner();
inner.in();
inner.getID();
}
}
静态内部类
添加了static字段
获得不了id了,除非id是static
局部内部类
public class Outer {
}
//一个java类文件中可以有多个class,但是只能有一个public class
class A{
}
public class Outer {
public void method(){
class Inner{
}
}
}