zoukankan      html  css  js  c++  java
  • 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

    多态性:

          方法的重载和重写

          对象的多态性

                向上转型:程序自动完成

                向下转折:强制类型转换

  • 相关阅读:
    redis、memcache、mongoDB有哪些区别(转载)
    初识spring与quartz整合实现定时任务
    使用CXF与Spring集成实现RESTFul WebService
    Linux top
    JS操作Radio与Select
    初识Redis
    JVM基础学习
    自动装配【Spring autowire】
    包含中文的字符串中截取前N个字符
    EF中Json序列化对象时检测到循环引用的解决办法
  • 原文地址:https://www.cnblogs.com/bruceyo/p/5099232.html
Copyright © 2011-2022 走看看