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));
       }
}

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

     

 

posted @ 2020-03-19 17:55  冷月无归  阅读(238)  评论(0编辑  收藏  举报