一、抽象类
-
abstract 抽象类不能new出来,只能靠子类去实现它;约束!
-
抽象类里可以写普通方法~
-
抽象方法必须在抽象类中
-
抽象的抽象:约束~
抽象类存在的意义:提高开发效率,节省时间空间成本,提升可扩充性
//abstract抽象类 ,类 extends 只有单继承! (接口可以多继承)
public abstract class Action {
//提供约束,有人帮我实现就行~
//abstract 抽象方法,只有方法名,没有方法的实现
public abstract void doSomething();
}
public class A extends Action{
@Override
public void doSomething() {
System.out.println("子类实现抽象父类的抽象方法!!");
}
}
二、接口
普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有!
接口:只有规范!自己无法写方法~专业的约束!约束和实现分离:面向接口编程~
接口的作用:
-
约束
-
定义一些方法,让不同的人实现~ 10------>1
-
public abstract
-
public static final 定义静态常量(很少用)
-
接口不能被实例化~,接口中没有构造方法
-
implements可以实现多个接口
-
必须要重写接口中的方法~
package com.oop.demo10;
//接口都需要有实现类
public interface UserService {//接口中的方法,全部默认为public abstract类型!
void add(String name);
void delete();
void update();
void select();
}
package com.oop.demo10;
public interface TimeService {
void timer();
}
package com.oop.demo10;
public class ServiceImpl implements UserService,TimeService{
@Override
public void timer() {
}
@Override
public void add(String name) {
}
@Override
public void delete() {
}
@Override
public void update() {
}
@Override
public void select() {
}
}
三、内部类
内部类就是在一个类的内部再定义一个类,比如A类中定义一个B类,那么B类就称为A类的内部类,反过来称为外部类
-
成员内部类
-
静态内部类:静态成员内部类
-
局部内部类:在方法的内部写新的类
-
匿名内部类:
package com.oop.demo11;
public class Outer {
private int age = 10;
public void out(){
System.out.println("这是外部类的方法");
}
public class Inner{
public void in(){
System.out.println("这是内部类的方法");
}
//可以获得外部类的私有属性!
public void getAge(){
System.out.println(age);
}
}
}
package com.oop.demo11;
public class Test {
public static void main(String[] args) {
//没有名字初始化类,不用将实例保存到变量中~
new Apple().eat();
UserService userService = new UserService() {
@Override//重写接口的方法
public void hello() {
System.out.println("hello");
}
};
}
}
class Apple{
public void eat(){
System.out.println(1);
}
}
interface UserService{
void hello();
}