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

    一、final

    final的中文意思就是不可更改的,最终的。

    1.final修饰变量,那么该变量无法更改。一旦该变量赋了初值,就不能重新赋值。

    1 final MAX = 1100;
    2 //final修饰后MAX就无法重新赋值。

    2.final修饰方法

    final修饰方法,那么该方法不能被子类重写,但可以重载。

    1 class Person{
    2      final void getName(){.....}
    3 }
    4 
    5 //getName()方法,无法被子类重写。 

    3.final修饰类

    final修饰类,该类无法被继承。

    二、抽象类

    首先什么是抽象类,简而言之就是包含了抽象方法的类。

    那什么又是抽象方法了,就是只有声明部分,但没有方法体。

    完整的方法应该是

    1 void getName()  //方法声明
    2 {                      //方法体
    3       System.out.println("i am hcf");  
    4 }
    而抽象方法是没有方法体的,abstract void getName();

    抽象方法前面必须加abstra修饰,拥有抽象方法的类称为抽象类,那么抽象类前面要加上abstract修饰。

    1 abstract class  Person{
    2     abstract void getName();
    3 }

     下面简述抽象类的几个要点:

    1.有抽象方法的类只能定义为抽象类,不然会出现错误。

    1 abstract class  Person{            //定义为抽象类,那么必须包含抽象方法。
    2        abstract void getName();  //有抽象方法,必定为抽象类
    3 }                                 

    2.抽象类不能用new创建对象,即使你在抽象类里面添加构造方法也不行。

    复制代码
    public class TestAbstract {
        public static void main(String[] args) {
        /*    Person stu = new Person();      */    //Person是抽象类,无法实例化
        }
    }
    
    abstract class  Person{
      abstract void getName();
      public void Person(){         //即使添加了构造方法也无法实例化。
       }                                    //只要是抽象类,就无法实例化。
    }
    复制代码

    3.抽象类中可以包含一般的方法或属性,但只能被子类调用。

    复制代码
     1 public class TestAbstract {
     2     public static void main(String[] args) {
     3         Student stu = new Student();
     4         stu.getName();
     5         stu.out();        //抽象类中的其他方法可以通过子类来调用
     6     }
     7 }
     8 
     9 abstract class  Person{
    10     abstract  void getName();
    11     void out(){                                   //抽象类中包含的其他方法
    12         System.out.println("1132");
    13     }
    14 }
    15 
    16 class Student extends Person{
    17     public void getName(){
    18         System.out.println("i am hcf");
    19     }
    20 }
    复制代码
    运行结果:
    i am hcf
    1123

    4.抽象类只能被继承。

    5.子类必须实现抽象类中的抽象方法。

    复制代码
    abstract class  Person{
        abstract  void getName();
        void out(){
            System.out.println("1132");
        }
    }
    
    class Student extends Person{
        public void getName(){         //子类必须实现抽象方法,否则会报错。
            System.out.println("i am hcf");
        }
    }
    复制代码

    三、接口

    接口比抽象类还要抽象,接口只能包含方法声明和常量。

    接口说明:

    1.接口只能用public 或default修饰,public修饰的接口名称必须和文件名相同(这点和public类相似)。

    复制代码
    1 public interface Fly{
    2        void flyStyle();
    3 }
    4 
    5 
    6 interface attack{
    7        int attackRange(String arms);
    8 }
    复制代码

    2.一个文件中只能有一个被public修饰的接口。

    3.接口可以多继承

    复制代码
    public interface Fly{
          void flyStyle();
     }
     
     
    interface Attack{
            int attackRange(String arms);
    }
    
    interface FlyArms extends Fly, Attack{  //飞行武器(FiyArams)就继承了Fly(飞行)接口和attack(攻击)接口
                             
     }
    复制代码

    4.接口中常量默加上public static final,写于不写都一样。

    1 interface Fly{
    2     int MIN_HIGHT = 1;   //相当于public static final int MIN_HIGHT = 1;
    3     void flyStyle();     //相当于public abstract void flyStyle();
    4 }

    5.接口中的方法默认加上public abstract。 

    接口要点:

    1.接口不可被类继承,只能被类实现(implements)。

    2.接口中的方法必须实现,且方法必为public。

    复制代码
     1 public interface Fly{
     2       void flyStyle();
     3  }
     4  
     5  
     6 interface Attack{
     7         int attackRange(String arms);
     8 }
     9 
    10 
    11 class implements Fly{                        //接口只能被实现(implements)
    12          public void flyStyle(){             //类实现接口必须实现接口中定义好的方法。
    13                System.out.println("飞飞飞!");
    14          }
    15 }
    复制代码

    3.接口不能创建实例,但可以声明引用变量类型。

    复制代码
     1 public class FramPaint {
     2     public static void drawFram(MyPaint p){   //(Mypaint p) 接口声明引用变量类型
     3         System.out.println("启动线程");        //有点像之前的多态父类声明引用子类对象。
     4         System.out.println("增加循环");        //这个还涉及到后面的回调函数,其实就是多态。
     5         System.out.println("查看消息");
     6         p.paint();
     7         System.out.println("启动缓存");
     8         
     9     }
    10     public static void main(String[] args) {
    11         FramPaint.drawFram(new GameFarm());    //调用静态方法可以直接类名加方法调用,
    12 } //静态方法中只能调用静态方法。 13 14 } 15 16 interface MyPaint { 17 void paint(); 18 } 19 20 class GameFarm implements MyPaint{ 21 @Override 22 public void paint() { 23 System.out.println("GameFarm"); 24 } 25 }
    复制代码
  • 相关阅读:
    UnQLite简介
    .net中webconfig自定义配置
    webservice有关application/xop+xml的异常
    .NET4缓存过期策略摘录
    关于sea.js的笔记
    npm笔记和bower
    使用npm安装一些包失败了的看过来(npm国内镜像介绍)
    easyui的datagird动态设置当前页数
    Oracle中Merge into用法总结
    Oracle 12.1.0.2 对JSON的支持
  • 原文地址:https://www.cnblogs.com/YWJAVA7010/p/9372559.html
Copyright © 2011-2022 走看看