zoukankan      html  css  js  c++  java
  • java中的abstract、接口、final和Object

    抽象类

          一个类被abstract所修饰,且含有抽象函数,这个类被称为抽象类。其作用或是应用场景通常是作为父类,知道要有一项功能,但不知应该怎么去写,定义好抽象函数后,交给子类去重写。所以抽象类不能直接被实例化,而且抽象函数必须被重写。注意:抽象类中可以含有普通的成员函数。举例:

    abstract class Student{
          public void fun(){//普通的成员函数,有方法体
                System.out.println("这是个普通方法");
          } 
          public abstract void print();//抽象方法。没有方法体
    }
    class Classroom extends Student{//子类
         @Override
         public void print(){//重写抽象方法print()
               System.out.println("重写抽象方法");
         }
    }
    public class Test1{
          public static void main(String[] args){
                Student s1 = new Classroom();
                s1.print();//被重写过的方法
          }
    }

    注:抽象类中有构造方法,且子类对象实例化的时候,依然满足先执行父类构造,再执行子类构造的顺序。抽象类不能使用final声明,因为抽象类会有子类,final特性下面会有。

    接口(interface)

        比抽象类更“抽象”的东西:

        1、不允许有普通函数,全是抽象函数;因此,abstract标记可以省掉。

        2、接口中可以定义变量,但是一旦定义就不能改变,实际上是常量,并且变量默认是静态的。

        3、接口中的成员强制都是public。

        4、只能够继承一个抽象类,但是可以实现多个接口,用逗号隔开(解决了java无法使用多继承)。写法:class 子类 extends 父类 implements 接口1,接口2,…{}举例:

    package interface1;
    interface Dialog {//接口
         public void show();
    }
    class FontDialog implements Dialog{
         public void show(){
               System.out.println("FontDialog.show()");
         }
    }
    public class Main {
         public static void toCenter(Dialog dialog){
               System.out.println("计算屏幕数据");
               dialog.show();
         }
         public static void main(String[] args){
               FontDialog fd = new FontDialog();
               toCenter(fd);
         }
    }

    final 关键字

    作用如下:

             1、用final来修饰一个类表示该类不能被继承。例 final class Student()

        2、用final来修饰一个函数表示该类在被子类继承的情况下,该函数不能被重写。例public final void show();

        3、用final来修饰一个成员变量表示该成员变量的值不允许被改变,也就是说,不允许重新赋值(哪怕是同一个值)。l例:public final int i1 = 3;

    Object 类

          在 Java 中定义一个类时,如果没有用 extends 明确标明直接父类,那么该类默认继承 Object 类,因此,Object 类是所有类的父类,或者说,Java 中任何一个类都是Object 的子类。

    常用的方法

        1、toString 方法:“System.out.println(cus);”会自动调用其toString方法,例:

    package object;
    public class Student {//默认继承Object类
          private String name;
          public Student (String name){
                this.name = name;
          } 
          public String toString(){//重写从Object继承过来的 toString 方法
                 return this.name;
          }
          public static void main(String[] args){
                Student cus = new Student("张三");
                System.out.println(cus);//输出张三
          }
    }

    注:如果没有重写,输出的会是对象的地址

        2、equals方法

    package object;
    public class Student{//默认继承Object类
          private String name;
          public Student(String name){
                this.name = name;
          } 
          public boolean equals(Student cus){//如果不重写,将比较两个对象的地址
                if(name.equals(cus.name)){
                     return true;
                }
                return false;
           }
           public static void main(String[] args){
                 Student cus1 = new Student("张三");
                 Student cus2 = new Student("张三");
                 System.out.println(cus1.equals(cus2));
           }
    }

    注:“==”号不能用在这里,除非两个引用指向同一对象,这两个引用用“==”判断才会相等。而且判断两个字符串相等,也不能用“==”。

         

  • 相关阅读:
    git修改 config 配置用户名和邮箱
    Tranformer模型学习
    centos安装
    ubuntu cuda配置
    ubuntu安装python3.6
    flask后端部署
    linux基本操作
    python 基础数据结构
    文本特征选择
    常用笔记
  • 原文地址:https://www.cnblogs.com/541wsy/p/12525939.html
Copyright © 2011-2022 走看看