zoukankan      html  css  js  c++  java
  • 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;
        }
    
    }

    抽象类和接口的区别:

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

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

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

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

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

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

    为什么接口可以解耦合?

  • 相关阅读:
    EOJ二月月赛补题
    cf401d
    cf628d
    cf55d
    HDU 6148 Valley Number
    洛谷 P3413 SAC#1
    洛谷 P4127[AHOI2009]同类分布
    洛谷 P2602 [ZJOI2010]数字计数
    bzoj 3679
    函数和循环闭包的理解
  • 原文地址:https://www.cnblogs.com/mxh-java/p/11176300.html
Copyright © 2011-2022 走看看