JavaSE Day8

本节内容

1.面向对象思维

2.面向对象的3大特征:继承

3.super关键词

4.方法的重写

5.final关键词

一、面向对象编程:

面向对象编程:

  1.面向对象编程是一种思维方式。

      特点:

              1.先整体,后局部

              2.先抽象,后具体

              3.能做什么,具体做什么

二、面向对象:继承

         为什么要有继承:如果没有继承,那么现在有这么2个程序:一个人Person  、一个学生 Student

package com.xk;
/*
 *作者:吴志龙
 *日期:2018年7月27日  
*/
public class Person {
    
      private String name ;
      private int age ;
      public void setName(String name) {
                this.name = name ;
      }
      public void setAge(int age) {
                this.age = age ;
      }
      public String getName() {
                return this.name ;
      }
      public int getAge(){
                return this.age ;
      }

    

}
View Code
package com.xk;
/*
 *作者:吴志龙
 *日期:2018年7月27日  
*/
public class Student {
     private String name ;
     private int age ;
     private String school ;
     public void setName(String name) {
               this.name = name ;
     }
     public void setAge(int age) {
               this.age = age ;
     }
     public void setSchool(String school) {
               this.school = school ;
     }
     public String getName() {
               return this.name ;
     }
     public int getAge(){
               return this.age ;
     }
     public String getSchool() {
               return this.school ;
     }

}
View Code

以上两个程序通过代码的比较可以清楚的发现:代码之中存在了重复,而按照之前所学,这种重复是不可能消除的。

在所有的代码之中,最具有重复意义的就是链表类,针对于每一个简单Java类或者是说其他的任何类,都编写一个链表程序,代码量庞大,而且不方便维护。

继承的概念:

   继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

Java中的继承是单继承:一个子类只能有一个直接的父类,但是一个父类可以有多个子类。但是Java中允许多重继承。

Java中继承的语法:

class 子类 extends 父类{

}

子类又被称为派生类; 父类又被称为超类(Super Class)。

 继承的限制:

1一个子类只能够继承一个父类,存在单继承局限。

2在一个子类继承的时候,实际上会继承父类之中的所有操作(属性、方法),但是需要注意的是,对于所有的非私有(no private)操作属于显式继承(可以直接利用对象操作),而所有的私有操作属于隐式继承(间接完成)

3 在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法。

在任何的情况下,子类都逃不出父类构造的调用,很明显,super调用父类构造,这个语法和this()很相似:super调用父类构造时,一定要放在构造方法的首行上。

super

在Java中使用supeer来引用父类的属性以及方法

在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用里面的父类对象呢?使用super来引用,this指的是当前对象的引用,super是当前对象里面的父对象的引用

方法的重写:

既然现在出现了继承的关系,那么就存在了子类和父类的联系,而在子类之中有可能定义和父类完全相同的方法或属性的名称,这个时候就称为覆写了。

当子类定义了和父类在方法名称、返回值类型、参数类型及个数完全相同的方法的时候,称为方法的覆写。

没有覆写:

class A {
    public void print() {
        System.out.println("Hello World .");
    }
}

class B extends A {
}

public class Test {
    public static void main(String args[]) {
        B b = new B();
        b.print(); // 方法从父类继承而来
    }
}

运行结果

Hello World .

这时实例化的是子类对象,但是在子类中没有print()方法,那么就使用从父类中继承而来的pritn()方法。

实现覆写:

class A {
    public void print() {
        System.out.println("Hello World .");
    }
}

class B extends A {
    public void print() { // 方法名称、参数类型及个数、返回值全相同
        System.out.println("世界,你好!");
    }
}

public class Test {
    public static void main(String args[]) {
        B b = new B();
        b.print(); // 方法从父类继承而来
    }
}

运行结果
世界,你好!

当一个类中的方法被覆写后,如果实例化的是这个子类对象,则调用的方法就是被覆写过的方法。

在进行方法覆写的时候有一点需要注意:被子类所覆写的方法不能拥有比父类更严格的访问控制权限。
如果此时父类之中的方法是default权限,那么子类覆写的时候只能是default或public权限,而如果父类的方法是public,那么子类之中方法的访问权限只能是public。

当一个子类覆写了一个父类方法的时候,子类要想调用父类的被覆写过的方法,要在方法前要加上“super”

一定要记住操作范围:
(1)this.方法():先从本类查找是否存在指定的方法,如果没有找到,则调用父类操作;
(2)super.方法():直接由子类调用父类之中的指定方法,不再找子类

final关键词:

  final关键字的基本用法

在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。

1.修饰类

  当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。

2.修饰方法

 下面这段话摘自《Java编程思想》第四版第143页:

  “使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。“

  因此,如果只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。

  注:类的private方法会隐式地被指定为final方法。

 3.修饰变量

  修饰变量是final用得最多的地方,也是本文接下来要重点阐述的内容。首先了解一下final变量的基本语法:

对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

原文地址:https://www.cnblogs.com/wuzhilong/p/9378294.html