zoukankan      html  css  js  c++  java
  • Java抽象类与接口(1) ------抽象类

    1、抽象实体类

     1 package com.cn.donleo.test.model;
     2 
     3 /**
     4  * @author liangd
     5  * date 2020-10-22 16:40
     6  * code 员工抽象类
     7  */
     8 public abstract class AbstractEmployee {
     9     /**
    10      * 姓名
    11      */
    12     protected String name;
    13     /**
    14      * 性别
    15      */
    16     protected boolean sex;
    17     /**
    18      * 年龄
    19      */
    20     protected Integer age;
    21 
    22     /**
    23      * 构造方法
    24      * @param name
    25      * @param sex
    26      */
    27     public AbstractEmployee(String name, boolean sex) {
    28         this.name = name;
    29         this.sex = sex;
    30     }
    31 
    32     /**
    33      * 定义抽象方法
    34      * @return
    35      */
    36     public abstract void getSalary();
    37 
    38     /**
    39      * 定义普通方法
    40      */
    41     public void getUser(){
    42         System.out.println("父类非抽象方法-----员工");
    43     }
    44 
    45 }

    2、继承抽象类一

     1 package com.cn.donleo.test.model;
     2 
     3 /**
     4  * @author liangd
     5  * date 2020-10-22 17:01
     6  * code 会计实体类
     7  */
     8 public class Accouting extends AbstractEmployee {
     9     /**
    10      * 构造方法
    11      *
    12      * @param name
    13      * @param sex
    14      */
    15     public Accouting(String name, boolean sex) {
    16         super(name, sex);
    17     }
    18 
    19     /**
    20      * 重写父类抽象方法,一定会被继承
    21      */
    22     @Override
    23     public void getSalary() {
    24         System.out.println("会计领了7000工资");
    25     }
    26 
    27     /**
    28      * 重写非抽象的父类方法,可以不继承
    29      */
    30     public void getAccounting(){
    31         System.out.println("子类非抽象方法------会计");
    32     }
    33 }

    3、继承抽象类二

     1 package com.cn.donleo.test.model;
     2 
     3 /**
     4  * @author liangd
     5  * date 2020-10-22 16:51
     6  * code 员工类
     7  */
     8 public class Manager extends AbstractEmployee{
     9     /**
    10      * 由于定义了带参数的构造方法,默认不带参数的构造方法失效,需要继承下来
    11      *
    12      * @param name
    13      * @param sex
    14      */
    15     public Manager(String name, boolean sex) {
    16         super(name, sex);
    17     }
    18 
    19     /**
    20      * 子类继承父类抽象方法,需要重写
    21      */
    22     @Override
    23     public void getSalary() {
    24         System.out.println("经理领了8000工资");
    25     }
    26 
    27     /**
    28      * 重写父类非抽象方法
    29      */
    30     public void getManager(){
    31         //显示父类姓名
    32         System.out.println("子类非抽象方法------经理");
    33     }
    34 
    35 }

    4、测试类

     1 package com.cn.donleo.test;
     2 
     3 import com.cn.donleo.test.model.AbstractEmployee;
     4 import com.cn.donleo.test.model.Accouting;
     5 import com.cn.donleo.test.model.Manager;
     6 
     7 /**
     8  * @author liangd
     9  * date 2020-10-22 17:06
    10  * code 测试抽象类
    11  */
    12 public class TestAbstract {
    13     /*
    14         一、对抽象类的理解:
    15             1、抽象类里面是不是全是抽象方法? 不是,可以有普通方法
    16             2、有抽象方法的类是不是一定是抽象类? 是,有抽象方法类名必须加abstract
    17             3、抽象类是不是必须有抽象方法? 不是必须的
    18         二、对接口的理解
    19             1、接口是一个特殊的抽象类
    20             2、接口中的方法可以不加修饰符
    21      */
    22 
    23     /**
    24      * 抽象类和接口的区别
    25      * 一、抽象类
    26      *   1、抽象类使用abstract修饰;
    27      *   2、抽象类不能实例化,即不能使用new关键字来实例化对象;
    28      *   3、含有抽象方法(使用abstract关键字修饰的方法)的类是抽象类,必须使用abstract关键字修饰;
    29      *   4、抽象类可以含有抽象方法,也可以不包含抽象方法,抽象类中可以有具体的方法;
    30      *   5、如果一个子类实现了父类(抽象类)的所有抽象方法,那么该子类可以不必是抽象类,否则就是抽象类;
    31      *   6、抽象类中的抽象方法只有方法体,没有具体实现
    32      * 二、接口
    33      *   1、接口使用interface修饰;
    34      *   2、接口不能被实例化;
    35      *   3、一个类只能继承一个类,但是可以实现多个接口;
    36      *   4、接口中方法均为抽象方法;
    37      *   5、接口中不能包含实例域或静态方法(静态方法必须实现,接口中方法是抽象方法,不能实现)
    38      */
    39 
    40     public static void main(String[] args){
    41         String name = "liand";
    42         boolean sex = false;
    43         AbstractEmployee abstractEmployee = new AbstractEmployee(name,sex) {
    44             @Override
    45             public void getSalary() {
    46                 System.out.println("父类抽象方法---");
    47             }
    48         };
    49         //打印父类非抽象方法
    50         abstractEmployee.getUser();
    51 
    52         //Manager和Accounting都是继承AbstractEmployee类,实现多态
    53         Manager manager = new Manager(name,sex);
    54         manager.getSalary();
    55         manager.getManager();
    56 
    57         Accouting accouting = new Accouting(name,sex);
    58         accouting.getSalary();
    59         accouting.getAccounting();
    60     }
    61 
    62 }
  • 相关阅读:
    Intent
    BroadcastReceiver
    AsyncTask两种线程池
    多线程、Service与IntentService的比较
    AsyncTask
    转:Android开发:使用DDMS Heap进行内存泄露调试
    (原创)Android Binder设计与实现
    (原)一句mpAudioPolicy->get_input引发的血案
    LOCAL_WHOLE_STATIC_LIBRARIES与LOCAL_STATIC_LIBRARIES的区别
    非static成员函数通过类名::来调用,空指针调用成员方法不出错!
  • 原文地址:https://www.cnblogs.com/donleo123/p/14073523.html
Copyright © 2011-2022 走看看