zoukankan      html  css  js  c++  java
  • 抽象类和接口

    抽象类:被abstract关键字修饰的类

    抽象方法:只抽取方法声明,不抽取方法主体,此方法就是一个抽象方法

    抽象类定义:public abstract class{  }

    抽象方法定义:public abstract 返回值类型 方法名(参数);

    package com.oracle.Demo01;
    //抽象类
    //抽象方法没有方法体  有参数列表 有返回值类型
    public abstract class Developer {
          public abstract void work();
          public void eat(){
              System.out.println("吃馒头");
          }
    }
    package com.oracle.Demo01;
    
    public class JavaEEemp extends Developer {
            public void work(){
                System.out.println("用Java语言编程");
            }
    }
    package com.oracle.Demo01;
    
    public class Test {
    
        public static void main(String[] args) {
            JavaEEemp javaee = new JavaEEemp();
            javaee.work();
        }
    }

    接口的定义:功能的集合,接口只描述所应该具备的方法,并没有具体实现

    接口的定义格式:

    public interface 接口名{

    public abstract 返回值类型 方法名(参数);

    }

    package com.oracle.Demo01;
    //修饰符 public protected private default
    //在接口中,如果抽象方法前面没有写权限,默认是public权限
    //在接口中,方法前面默认的写法:public 
    //在接口中,定义成员变量,只能定义常量
    //static,可以直接被类名调用,格式 类名.成员
    //final,最终的,不可以被修改,用final修饰常量
    //在接口中,定义成员变量默认写法:public static final
    public interface USB {
        public static final int a = 8;
        public abstract void usbinter();
    }
    package com.oracle.Demo01;
    
    public class USBImp implements USB {
         public void usbinter(){
             System.out.println("usb鼠标连接");
         }
    }

    继承的同时实现接口

    package com.oracle.Demo02;
    
    public abstract class NoteBook {
         public abstract void game();
         public abstract void music();
    }
    package com.oracle.Demo02;
    
    public interface USB {
        public abstract void usbinter();
    }
    package com.oracle.Demo02;
    
    public class ThinkPadE570 extends NoteBook implements USB {
    
        @Override
        public void usbinter() {
            // TODO Auto-generated method stub
            System.out.println("有三个USB接口");
        }
    
        @Override
        public void game() {
            // TODO Auto-generated method stub
            System.out.println("从百度下载");
        }
    
        @Override
        public void music() {
            // TODO Auto-generated method stub
            System.out.println("随心听");
        }
          
    }

    接口的多继承

    package com.oracle.Demo03;
    
    public interface Fu1 {
         public abstract void show();
    }
    package com.oracle.Demo03;
    
    public interface Fu2 {
        public abstract void show1();
    }
    package com.oracle.Demo03;
    
    public interface Fu3 {
        public abstract void show2();
    }
    package com.oracle.Demo03;
    
    public interface Zi extends Fu1,Fu2,Fu3 {
           public abstract void show3();
    }

    接口和抽象类的区别

    l 都位于继承的顶端,用于被其他类实现或继承;

    l 都不能直接实例化对象;

    l 都包含抽象方法,其子类都必须覆写这些抽象方法;

    l 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;

    l 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)

    l 抽象类是这个事物中应该具备的内容, 继承体系是一种 is..a关系

    l 接口是这个事物中的额外内容,继承体系是一种 like..a关系

  • 相关阅读:
    516. Longest Palindromic Subsequence
    31. Next Permutation
    572. Subtree of Another Tree
    vue中无法监听到子组件的事件的问题
    vue中注意watch的执行顺序
    vue中路由懒加载浅析
    关于typescript 报错问题
    深入理解Typescript中文版
    vue中的高阶组件
    vue中的mixins
  • 原文地址:https://www.cnblogs.com/yelena-niu/p/9056917.html
Copyright © 2011-2022 走看看