zoukankan      html  css  js  c++  java
  • 【转】java关键字final ,抽象类、接口介绍

    1.final 关键字

    final关键字可以用来修饰类,方法,成员变量

    (1)final标记的类不能被继承;

    (2)final标记的方法不能被子类复写;

    (3)final标记的变量即成为常量,只能被赋值一次.

    final标记的变量名的所有单词必须大写

    2.抽象类

    2.1抽象类的定义必须先讲抽象方法的定义. 所谓抽象方法,是指只声明而未实现(即没有{}包围的方法体)的方法. 而含有一个或多个抽象方法的类就称为抽象类.

    抽象类 = 普通类 + 抽象方法

    对于抽象类, 抽象类是不能够直接实例化的, 如果要使用一个抽象类,就必须要有该抽象类的子类. 如果抽象类的子类不是抽象类的话,就一定要复写该抽象类的所有抽象方法.

    abstract class Person

    {

    //全局常量的命名一定要采取全部字母大写的方式

    public static final String NAME = "newsainton";

    //print()方法有方法体,所以不是抽象方法

    public void print()

    {

    System.out.println("非抽象方法中,Name = "+NAME);

    }

    //fun()方法不含方法体,为抽象方法

    public abstract void fun();

    }

    //B类继承自A类,但B未声明为抽象类,则必须要复写A类中所有的抽象方法

    class Student extends Person

    {

    public void fun()

    {

    System.out.println("抽象方法中,Name = "+super.NAME);

    }

    }

    public class Demo01

    {

    public static void main(String args[])

    {

    Student s = new Student();

    s.fun();

    s.print();

    }

    }

    abstract class Person

    {

    //全局常量的命名一定要采取全部字母大写的方式

    public static final String NAME = "newsainton";

    //print()方法有方法体,所以不是抽象方法

    public void print()

    {

    System.out.println("非抽象方法中,Name = "+NAME);

    }

    //fun()方法不含方法体,为抽象方法

    public abstract void fun();

    }

    //B类继承自A类,但B未声明为抽象类,则必须要复写A类中所有的抽象方法

    class Student extends Person

    {

    public void fun()

    {

    System.out.println("抽象方法中,Name = "+super.NAME);

    }

    }

    public class Demo01

    {

    public static void main(String args[])

    {

    Student s = new Student();

    s.fun();

    s.print();

    }

    }

    2.2抽象类中允许有自己的构造方法,但是该构造方法并不能直接实例化自己的对象. 如果在抽象类中存在有参构造方法,则必须在子类中明确的使用super([参数列表])指明要调用父类中的哪个构造方法.

    abstract class Person

    {

    // 应该有姓名和年龄属性

    private String name ;

    private int age ;

    public Person(){}

    // 如果已经不是无参的,则必须在子类中明确调用无参构造

    public Person(String name,int age)

    {

    this.name = name ;

    this.age = age ;

    }

    public String getName()

    {

    return this.name ;

    }

    public int getAge()

    {

    return this.age ;

    }

    // 定义一个输出方法,但是此方法为抽象方法

    public abstract String getInfo() ;

    }

    class Student extends Person

    {

    public Student(String name,int age)

    {

    // 调用Person类中有两个参数的构造方法

    super(name,age) ;

    }

    public String getInfo()

    {

    return "姓名 = "+super.getName()+",年龄 = "+super.getAge() ;

    }

    }

    public class Demo05

    {

    public static void main(String args[])

    {

    Student s = new Student("张三",30) ;

    System.out.println(s.getInfo()) ;

    }

    }

    abstract class Person

    {

    // 应该有姓名和年龄属性

    private String name ;

    private int age ;

    public Person(){}

    // 如果已经不是无参的,则必须在子类中明确调用无参构造

    public Person(String name,int age)

    {

    this.name = name ;

    this.age = age ;

    }

    public String getName()

    {

    return this.name ;

    }

    public int getAge()

    {

    return this.age ;

    }

    // 定义一个输出方法,但是此方法为抽象方法

    public abstract String getInfo() ;

    }

    class Student extends Person

    {

    public Student(String name,int age)

    {

    // 调用Person类中有两个参数的构造方法

    super(name,age) ;

    }

    public String getInfo()

    {

    return "姓名 = "+super.getName()+",年龄 = "+super.getAge() ;

    }

    }

    public class Demo05

    {

    public static void main(String args[])

    {

    Student s = new Student("张三",30) ;

    System.out.println(s.getInfo()) ;

    }

    }

    3.接口:

    3.1接口是抽象方法与常量的结合

    接口的定义方式为: interface 接口名 { 数据类型 常量名 = 常量值; 返回值类型 方法名(); .......}

    在Java中,一个类只能继承一个类,但是却可以实现(implements)多个接口. 如果实现接口的类不是抽象类的话,则该子类必须复写接口中所有的抽象方法.

    interface Person

    {

    //接口中包含了抽象类和抽象方法

    public static final String NAME = "newsainton";

    public abstract void fun();

    }

    // 一个类可以继承多个接口,但如果该类不是抽象类的话,则必须实现抽象类中的所有抽象方法

    class Student implements Person

    {

    public void fun()

    {

    System.out.println("name = "+NAME);

    }

    }

    public class Demo02

    {

    public static void main(String args[])

    {

    Student s = new Student();

    s.fun();

    }

    }

    //接口中包含了抽象类和抽象方法,因此代码也可以这样写

    interface Person

    {

    //接口中包含了抽象类和抽象方法

    //public static final String NAME = "newsainton";

    public String NAME = "newsainton";

    //public abstract void fun();

    public void fun();

    }

    class Student implements Person

    {

    public void fun()

    {

    System.out.println("name = "+NAME);

    }

    }

    public class Demo03

    {

    public static void main(String args[])

    {

    Student s = new Student();

    s.fun();

    }

    }

    一个接口可以使用extends关键字去继承一个或多个已有的接口,但在子类的实现时,也必须全部实现所有接口的抽象方法.

    interface A

    {

    public void printA() ;

    }

    interface B

    {

    public void printB() ;

    }

    interface C extends A,B

    {

    public void printC() ;

    }

    class X implements C

    {

    // 如果实现了(继承)C接口,则在子类中就必须覆写全部的抽象方法

    public void printA()

    {

    System.out.println("A --> HELLO") ;

    }

    public void printB()

    {

    System.out.println("B --> HELLO") ;

    }

    public void printC()

    {

    System.out.println("C --> HELLO") ;

    }

    }

    public class Demo04

    {

    public static void main(String args[])

    {

    X x = new X() ;

    x.printA() ;

    x.printB() ;

    x.printC() ;

    }

    }

    3.2如果一个子类既要继承一个抽象类,又要实现一个接口,该怎么写呢?

    我们采取的是: class 类名称 extends 抽象类 implements 接口 这样的语法格式.

  • 相关阅读:
    第一个只出现一次的字符
    把数组排成最小的数
    计算机系统结构 | 期末复习总结学习笔记
    《网络协议分析及编程》 复习搜整
    Oracle PL/SQL DBA 编程实践基础
    你的人生,就是被这 9 个金句毁掉的
    编译原理学习笔记·语法分析(LL(1)分析法/算符优先分析法OPG)及例子详解
    oracle中执行execute的时候报异常ORA-01031的解决办法
    编译原理学习笔记·关于四种文法的理解以及 如何根据语言描述给出正则式或相应文法
    大范围内高效查找回文质数(回文数猜想)
  • 原文地址:https://www.cnblogs.com/sunson/p/2446869.html
Copyright © 2011-2022 走看看