zoukankan      html  css  js  c++  java
  • JAVA基础部分复习(四、抽象类与接口)

    抽象类与接口的定义:

    package cn.review.day02;
    /**
     * 抽象类
     * 定义:
     * 1.抽象类使用关键字abstract修饰
     * 2.抽象方法必须定义在抽象类中,抽象方法没有方法体,抽象方法必须使用abstract关键字修饰。
     * 3.抽象类中的抽象方法在子类中必须实现(即重写)。
     * 4.抽象类中可以定义非抽象方法,也可以定义属性。
     * 5.抽象类不可以new,因为调用抽象方法没有意义。
     * 
     * 抽象类是对事物的抽象,当多个类中出现相同功能,但是功能主体不同,这时可以进行向上抽取。目的是只抽取功能定义,而不抽取功能主体。
     * 例子:比如人,每个人都有名字和年龄,我们可以把人类作为抽象类,不同的人去继承这个抽象类,实现其中同样的方法。
     * @author dyq
     *
     */
    public abstract class Person {
        public abstract int getAge();
        public abstract String getName();
        static {
            System.out.println("抽象类中的静态代码块");
        }
        public static void methodAge() {
            
        }
        
    }
    class Teacher extends Person{
        private String name;
        private int age;
        public Teacher(String name,int age) {
            this.name = name;
            this.age = age;
        }
        @Override
        public int getAge() {
            return this.age;
        }
        @Override
        public String getName() {
            return this.name;
        }
    }
    class Worker extends Person{
        private String name;
        private int age;
        public Worker(String name,int age) {
            this.name = name;
            this.age = age;
        }
        @Override
        public int getAge() {
            return this.age;
        }
        @Override
        public String getName() {
            return this.name;
        }
        
    }
    
    /**
     * 接口的定义
     * 1.接口类使用interface来声明
     * 2.接口中的方法必须是抽象的,默认都是隐式抽象的,方法都被隐式的指定为public abstract(只能是public abstract的,使用其他的修饰符都会报错)
     * 3.接口中可以有变量,但是接口中的变量都是被隐式的指定为public static final变量(只能用public修饰符,使用其他的会报错)
     * 4.接口中的方法是不能在接口中实现的,只能在实现接口的类中实现。
     * 
     * 接口是对行为的抽象,泛指供别人调用的方法或者函数。
     * 比如一下,我们将吃什么和怎么吃的行为使用接口声明,然后使用学生类来实现这个接口。
     * @author dyq
     *
     */
    interface Eat{
        static final String str = "吃";
        public String eatFoods();
        public String getFoods();
    }
    class Student implements Eat{
        private String food;
        public Student(String food) {
            this.food = food;
        }
        @Override
        public String eatFoods() {
            return str + this.food;
        }
        @Override
        public String getFoods() {
            return this.food;
        }
    }

    抽象类与接口的实现以及区别:

    package cn.review.day02;
    /**
     * 抽象类,接口使用,以及比较
     * 抽象类与接口的区别:
     * 
     * 语法方面:
     * 1.抽象类中的方法可以有方法体,但是接口类中不可以。
     * 2.抽象类中的成员变量可以是各种类型的,但是接口类中只能是public static final的。
     * 3.接口类中不能有静态代码块以及使用static修饰的静态方法,而抽象类中可以有静态代码块和静态方法。
     * 4.一个类只能继承几个抽象类,但是一个类可以实现多个接口。
     * 
     * 设计层面:
     * 1.抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
     * 2.抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。
     * @author dyq
     *
     */
    public class abstractTest {
        public static void main(String[] args) {
            /**
             * 继承了抽象类
             */
            Teacher teacher = new Teacher("王老师",45);
            System.out.println(teacher.getName());
            System.out.println(teacher.getAge());
            /**
             * 实现了接口
             */
            Student student = new Student("白菜");
            System.out.println(student.getFoods());
            System.out.println(student.eatFoods());
        }
    }

    参考文章:https://www.cnblogs.com/dolphin0520/p/3811437.html#!comments

  • 相关阅读:
    es6之Promise
    es6之Proxy,Reflect
    js之对象
    Set,Map与Array,Object对比
    es6之数据结构 set,WeakSet,mapWeakMap
    es6之Symbol
    flex布局
    盒子模型,top和margin-top
    POJ1274-The Perfect Stall
    Codeforces 671D. Roads in Yusland 题解
  • 原文地址:https://www.cnblogs.com/XiOrang/p/9353474.html
Copyright © 2011-2022 走看看