Java基础--抽象类与接口

抽象类:

/**
 * 抽象类,对类的抽象描述,包括属性、方法的抽象描述
 * @author 尘世间迷茫的小书童
 *
 */
public abstract class MyAbstract {
    
    /**
     * 抽象类属性想要被子类继承,修饰符不能为private
     */
    public String name;
    public String sex;
    public int age;
    
    /**
     * 抽象类里的抽象方法必须实现,
     * 如果不实现可以将继承抽象类的子类声明为抽象类
     */
    public abstract void testDo();
    
    /**
     * 父类的方法可以选择性的重写
     * @param name
     */
    public void testDo(String name) {
        System.out.println("hello world " + name);
    }
    
    public void testDo(String name, int age) {
        System.out.println("name: " + name + " age: " + age);
    }
    
    public MyAbstract() {}
    
}
/**
 * 子类通过extend继承抽象类
 * 子类只可以继承一个父类
 * @author 尘世间迷茫的小书童
 *
 */
public class NewAbstract extends MyAbstract {

    /**
     * 抽象类的抽象方法必须实现或者声明集成类为抽象类
     */
    @Override
    public void testDo() {
        System.out.println("hello java's world");
    }

    /**
     * 非抽象方法,可以根据业务选择重写父类的方法
     */
    @Override
    public void testDo(String name) {
        // 调用父类的方法
        super.testDo(name);
        
        //自己实现
        System.out.println(name + "欢迎来到这个操蛋的世界!");
    }
    
    public NewAbstract() {
        super();
    }

}

经好友王**提醒原来abstract还可以修饰方法,即抽象方法,实在是惭愧,立即做了修改;

接口:

/**
 * interface是对method的抽象描述,
 * interface解决 父类/抽象类 单继承问题
 * interface可以解耦合
 * @author 尘世间迷茫的小书童
 *
 */
public interface MyInterface {
    
    /**
     * interface里的变量修饰符 public static final,变量不可修改
     * 默认是 public static final
     */
    String name = "小米";
    public static final String sex = "男";
    public static final int age = 23;
    
    /**
     * method对行为方法的抽象,不需要方法体
     * @return
     */
    public String testDo();
    
    /**
     * jdk1.8以后interface可以有方法体,需要加default关键字
     * @param param
     */
    public default void testDo(String param) {
        System.out.println("hello world " + param);
    }
    
}

 

/**
 * 实现类通过implements实现接口的所有方法
 * @author 尘世间迷茫的小书童
 *
 */
public class NewInterface implements MyInterface {

    /**
     * 子类必须实现接口里的所有方法,
     * 如果不想实现可以生命子类为interface
     */
    @Override
    public String testDo() {
        return "my name is " + this.name;
    }

}

抽象类和接口的区别:

属性:抽象类里的属性不是常量可以被修改,接口里的属性必须是常量,一旦赋值不能被修改;

方法:接口里的方法必须被实现,不想实现可以声明子类为接口;

   抽象类里的抽象方法必须被实现,不想实现抽象方法可以声明子类为抽象类;

      抽象类里的非抽象方法可以根据业务选择性的重写;

继承/实现:一个子类只可以继承一个抽象类或父类;

                   一个子类可以实现多个接口,且接口可以解耦和;

为什么接口可以解耦合?

posted @ 2019-07-12 15:25  尘世间迷茫的小书童  阅读(165)  评论(0编辑  收藏  举报