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

    抽象类和接口的区别:

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

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

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

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

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

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

    为什么接口可以解耦合?

  • 相关阅读:
    系统CLOCK 频率 C代码查看范例
    LINUX C 文件读写范例
    linux 打印机 打印机支持工作组 openprinting
    问题记录
    初步了解profile文件
    内核中的HZ 及延迟等
    LINUX_System_Call_Quick_Reference
    Linux基础篇 六 (bash shell基础 (vi /etc/shells))
    Android调用平台功能具体技巧分享
    男人35岁前要做好的几件事
  • 原文地址:https://www.cnblogs.com/mxh-java/p/11176300.html
Copyright © 2020-2023  润新知