抽象类、接口

抽象类

  1. 抽象类关键字:abstract

  2. 如果子类继承了包含抽象方法的抽象类,那么这个子类就必须要去重写这个父类的抽象方法,否则会报错。-

  3. 抽象类的所有方法(普通方法和抽象方法),继承了它的子类都必须要去实现它的方法,除非子类也是抽象类,这样就由子类的子类去重写。

  4. 抽象类不能new出来(无法实例化),只能靠子类去实现它,它只是一个约束。

  5. 抽象类里可以写普通方法,抽象方法必须写在抽象类里。

  6. 抽象类没有构造器,这也是为什么它无法实例化的原因。

练习代码:

package www.chen.oop.demo06;

public class Application {
    public static void main(String[] args) {
        //“抽象”是抽象的;无法实例化
        // new Abstract();
        A a = new A();
        a.doSomething();
        a.test();

    }
}
package www.chen.oop.demo06;

//abstract 抽象类
public abstract class Abstract {
    //抽象方法  只有方法的名字 没有方法的实现!
    //约束~有人帮我们实现
    public abstract void doSomething();
    public abstract void test();


}
package www.chen.oop.demo06;
//如果去继承了包含抽象方法的抽象类,那么子类必须去重写父类的抽象方法
public class A extends Abstract{

    @Override
    public void doSomething() {

    }

    @Override
    public void test() {

    }
}

接口

普通类:只有具体的实现(普通方法);

抽象类:具体实现和抽象方法都有;

声明类的关键字是:class

声明接口的关键字是:interface

  1. 接口就是用来专门写约束的地方,达到约束方法和实现方法分离的效果,这既是面向接口编程。

  2. 接口内所有的定义都是抽象的,方法是抽象方法,属性是用final修饰的常量。

  3. 接口都需要有实现类,一般实现类名称都以:impl结尾,即implements(实现)的缩写。

实现类的关键字:implements

  1. 要去实现接口的类,就要重写接口类中的所有方法。(定义的属性不用管,一般属性不在接口中去写)

  2. 虽然java是单继承,但是我们可以通过使用接口,侧面来实现多继承的效果。

练习代码:

package www.chen.oop.demo07;

// 接口 关键字interface 接口都需要有实现类
public interface UserService {
        // 为什么public abstract 是灰色的,
        // 因为在接口里的所有定义都是抽象的,所以不用再写抽象关键字
        //接口内定义的属性都是常量(final)
        // public static final int age = 20;
        int age = 20;
        // public static final int id = 9527;
        int id = 9527;
        void add(String name);
        void delete(String name);
        void update(String name);
        void query(String name);
}
package www.chen.oop.demo07;

// 接口的实现(implements):必须把接口的所有方法(约束)全部重写,才不报错
public class UserServiceImpl implements UserService,TimeService{

    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void times() {

    }

    @Override
    public void query(String name) {

    }
}
posted @ 2021-03-08 17:54  恶的反思  阅读(62)  评论(0)    收藏  举报