• Java Abstract Class & Interface


    一. 抽象类

    1. 抽象类:包含了一个抽象方法的类就是抽象类

    2. 抽象方法:声明而未被实现的方法,用关键字abstract声明

    3. 抽象类被子类继承,子类(如果不是抽象类)必须重写(override)抽象类中的所有抽象方法

    4. 定义格式:

    abstract class className{
      属性
      方法
      抽象方法
    }

    5. 抽象类不能被直接实例化,要通过其子类进行实例化

    抽象类的应用

     1 package com.bruceyo.absdemo;
     2 
     3 //抽象类的应用
     4 abstract class Person{
     5     private int age;
     6     private String name;
     7     public Person(int age, String name){
     8         this.age = age;
     9         this.name = name;
    10     }
    11     public void tell(){
    12         
    13     }
    14     
    15     public int getAge() {
    16         return age;
    17     }
    18 
    19     public void setAge(int age) {
    20         this.age = age;
    21     }
    22 
    23     public String getName() {
    24         return name;
    25     }
    26 
    27     public void setName(String name) {
    28         this.name = name;
    29     }
    30 
    31     public abstract void want();
    32     
    33 }
    34 class Student extends Person{
    35     private int score;
    36     
    37     public int getScore() {
    38         return score;
    39     }
    40 
    41     public void setScore(int score) {
    42         this.score = score;
    43     }
    44 
    45     public Student(int age, String name, int score) {
    46         super(age, name);
    47         this.score = score;
    48         // TODO Auto-generated constructor stub
    49     }
    50 
    51     @Override
    52     public void want(){
    53         System.out.println("Name:"+getName()+", Age:"+getAge()+", Score:"+getScore());
    54     }
    55     
    56 }
    57 class Worker extends Person{
    58     private int money;
    59     
    60 
    61     public int getMoney() {
    62         return money;
    63     }
    64 
    65     public void setMoney(int money) {
    66         this.money = money;
    67     }
    68 
    69     public Worker(int age, String name, int money) {
    70         super(age, name);
    71         this.money = money;
    72         // TODO Auto-generated constructor stub
    73     }
    74 
    75     @Override
    76     public void want(){
    77         System.out.println("Name:"+getName()+", Age:"+getAge()+", money:"+getMoney());
    78     }
    79     
    80 }
    81 
    82 public class AbsDemo {
    83 
    84     public static void main(String[] args) {
    85         // TODO Auto-generated method stub
    86         Student student = new Student(55,"Bruce",4);
    87         student.want();
    88         Worker worker = new Worker(66, "Json", 6666);
    89         worker.want();
    90         
    91     }
    92 
    93 }
    Abstract class

    二. 接口

    1. 接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成

    2. 定义格式:

    interface interfaceName{
        全局常量 //e.g. public static final int AGE = 100;
        抽象方法 //e.g. public abstract void tell();     
    }

    3. 接口实现必须通过子类,使用关键字implements, 而且接口是可以多实现的

    4. 一个类可以同时继承抽象类和实现接口

    5. 一个接口不能继承一个抽象类,但是可以通过extends关键字同时继承多个接口,实现接口多继承

    接口的应用

    package com.bruceyo.absdemo;
    
    interface USB{   //制定一个标准,每一个USB必须按照这个标准进行工作
        void start();//可省略public abstract
        void stop();
    }
    class C{                    //接口的实例
        public static void work(USB u){
            u.start();
            System.out.println("Working");
            u.stop();
        }
    }
    
    class USBDisk implements USB{
        public void start(){
            System.out.println("USBDisk start Working");
        }
        public void stop(){
            System.out.println("USBDisk stop Working");
        }
    }
    class Printer implements USB{
        public void start(){
            System.out.println("Printer start Working");
        }
        public void stop(){
            System.out.println("Printer stop Working");
        }
    }
    public class InterfaceDemo {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            C.work(new USBDisk());
            C.work(new Printer());
        }
    
    }
    Interface example

    多态性:

          方法的重载和重写

          对象的多态性

                向上转型:程序自动完成

                向下转折:强制类型转换

  • 相关阅读:
    安装Kali Linux虚拟机02
    前端入门之——知识补充 day11
    套接字编程知识回顾01
    关于js中 document.body.scrollTop 不能返回正确值的原因
    前端入门之——后台管理页面布局 学习 day10
    前端入门之——jquery day9
    pickle序列化与反序列化 + eval说明
    json序列化与反序列化
    项目中日志输出常用的设置
    logging模块基础3
  • 原文地址:https://www.cnblogs.com/bruceyo/p/5099232.html
Copyright © 2020-2023  润新知