• 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;
        }
    
    }

    抽象类和接口的区别:

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

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

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

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

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

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

    为什么接口可以解耦合?

  • 相关阅读:
    GhostBSD 3.0RC3,基于GNOME的FreeBSD
    Nagios 3.4.3 发布,企业级监控系统
    Jolokia 1.0.6 发布, JMX远程访问方法
    微软希望开发人员不要使 WebKit 成为新版 IE6
    Kwort Linux 3.5 正式版发布
    EJDB 1.0.24 发布,嵌入式 JSON 数据库引擎
    Pale Moon 15.3 Firefox“苍月”优化版发布
    Galera Load Balancer 0.8.1 发布
    SmartSVN V7.5 正式发布
    PostgresQL建立索引如何避免写数据锁定
  • 原文地址:https://www.cnblogs.com/mxh-java/p/11176300.html
Copyright © 2020-2023  润新知