杨校老师课堂之Java面向对象知识点整理集锦2

简介: 杨校老师课堂之Java面向对象知识点整理集锦

杨校老师课堂之Java面向对象知识点整理集锦1:https://developer.aliyun.com/article/1543045

12. 继承中的构造方法

当类之间产生了关系,其中各类中的构造方法,又产生了哪些影响呢?

首先我们要回忆两个事情,构造方法的定义格式和作用。

1. 构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的。

2. 构造方法的作用是初始化成员变量的。所以子类的初始化过程中,必须先执行父类的初始化动作。

子类的构造方法中默认有一个 super() ,表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。

代码如下

class Aminal {
 
    private int age;
 
    Aminal() {
        System.out.println(age);
    }
}
 
class Dog extends Aminal {
    // 不写 super(); Jvm 也会调用执行super();
 
    Dog() {
        System.out.println("wangcai");
    }
}
 
public class TestExtendsDemo {
 
    public static void main(String[] args) {
        Dog dog = new Dog();
    }
}
 
// 打印出结果是:0        wangcai

super和this的含义

super :代表父类的存储空间标识(可以理解为父亲的引用)。

this :    代表当前对象的引用(谁调用就代表谁)。

  1. 子类的每个构造方法中均有默认的super(),调用父类的空参构造。
  1. 手动调用父类构造会覆盖默认的super()。
  2. super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现

13. InstanceOf关键字

instanceof关键字

       1:用于判断某个对象是否是某种类型。

       2:格式

           对象名 instanceof 子类(实现)名

14.动态Bingding

动态绑定(后期绑定)是指:在程序运行过程中,根据具体的实例对象才能具体确定是哪个方法。

15.方法重写

16.Object类API

java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。

如果一个类没有特别指定父类, 那么默认则继承自Object类


根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。今天我们主要学习其中的2个:


public String toString():返回该对象的字符串表示。

public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。

toString方法


public String toString():返回该对象的字符串表示。


toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。


由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。


equals方法


public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。


调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。


这里的“相同”有默认和自定义两种方式。

17. 访问控制(包、访问权限)

在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,

  • public:公共的。
  • protected:受保护的
  • default:默认的
  • private:私有的

不同权限的访问范畴:


public
protected default private
同一类中
同一包中(子类与无关类)  
不同包的子类    
不同包中的无关类  

根据上表可知,public具有最大权限。private则是最小权限。

编写代码时,如果没有特殊的考虑,建议这样使用权限:

  1. 成员变量使用 private ,隐藏细节。
  2. 构造方法使用 public ,方便创建对象。
  1. 成员方法使用 public ,方便调用方法。
  2. 不加权限修饰符,其访问能力与default修饰符相同。

18. final关键字

学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承 API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,Java提供了 final 关键字, 用于修饰不可改变内容。

  • final:不可改变。可以用于修饰类、方法和变量
  • 类:被修饰的类,不能被继承。
  • 方法:被修饰的方法,不能被重写。
  • 变量:被修饰的变量,不能被重新赋值。

使用方式:

  • 修饰类
  • 格式如下
final class 类名 {
}

通过查询API回发现像 public final class String 、 public final class Math 、 public final class Scanner 等,很多我们学习过的类,都是被final修饰的,目的就是供我们使用,而不让我们所以改变其内容


修饰方法

格式如下

修饰符 final 返回值类型 方法名(参数列表){
//方法体
}
  • 修饰变量基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改。代码如下
  • 局部变量——基本类型
  • 局部变量——引用类型

19. 抽象类

父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有 意义,而方法主体则没有存在的意义了。我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法 的类就是抽象类。


定义抽象方法 :

没有方法体的方法。

定义抽象类:

包含抽象方法的类。

abstract使用格式:


使用 abstract 关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。


  • 定义格式
权限修饰符 abstract 返回值类型 方法名 (参数列表);
public abstract void playBall();

抽象类: 如果一个类包含抽象方法,那么该类必须是抽象类。

public abstract class Animal {
    public abstract void run();
}

abstract注意:


抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。  

抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。

抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设 计。

抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象 类。

理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有 意义。

20. 接口

接口,是Java语言中一种引用类型,是抽象方法的集合,

如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法 (JDK 9)。

接口的定义,它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并 不是类,而是另外一种引用数据类型

接口的使用,它不能创建对象,但是可以被实现( implements ,类似于被继承)。一个实现接口的类(可以看做 是接口的子类),需要实现接口中所有的抽象方法,创建该类对象,就可以调用方法了,否则它必须是一个抽象 类。

public interface 接口名称 {
// 抽象方法
// 默认方法
// 静态方法
// 私有方法
}

抽象方法:使用 abstract 关键字修饰,可以省略,没有方法体。该方法供子类实现使用。

public interface UserService {
    public abstract void userLogin();
}

默认方法:使用 default 修饰,不可省略,供子类调用或者子类重写。

public interface UserService {
    public default void set() {
        // 方法内容
    }
}

静态方法:使用 static 修饰,供接口直接调用。

public interface UserService {
    public static void get() {
        // 方法内容
    }
}

私有方法:使用 private 修饰,供接口中的默认方法或者静态方法调用。

public interface UserService {
    public static void getById(Integer id) {
        // 方法内容
    }
}
 

类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。

  • 实现的动作类 似继承,格式相仿,只是关键字不同,实现使用 implements 关键字。
  • 非抽象子类实现接口:
  • 必须重写接口中所有抽象方法。
  • 继承了接口的默认方法,即可以直接调用,也可以重写。

实现格式:

public class 类名 implements 接口名 {
    // 重写接口中抽象方法【必须】
    // 重写接口中默认方法【可选】
}

接口特点:

  • 接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。
  • 接口中,没有构造方法,不能创建对象。
  • 接口中,没有静态代码块。

杨校老师课堂之Java面向对象知识点整理集锦3:https://developer.aliyun.com/article/1543058

目录
相关文章
|
3天前
|
Java
Java编程思想(面向对象)第四版PDF分享
探索《Java编程思想》第四版,理解Java不仅是特性集合,更是解决问题的强大工具。本书深入设计层面,构建编程思维模型,助你逐步精通Java。[阅读更多](https://zhangfeidezhu.com/?p=355) ![Java编程思想](https://ucc.alicdn.com/pic/developer-ecology/nrw3f3oqlpmag_c8ff959a921545f1bbabcefd37f029cf.png)
18 1
Java编程思想(面向对象)第四版PDF分享
|
8天前
|
存储 Java API
Java数据结构之ArrayList(如果想知道Java中有关ArrayList的知识点,那么只看这一篇就足够了!)
Java数据结构之ArrayList(如果想知道Java中有关ArrayList的知识点,那么只看这一篇就足够了!)
Java数据结构之ArrayList(如果想知道Java中有关ArrayList的知识点,那么只看这一篇就足够了!)
|
8天前
|
设计模式 Java 编译器
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
|
8天前
|
Java 程序员 编译器
Java 异常处理详解(如果想知道Java中有关异常处理的知识点,那么只看这一篇就足够了!)
Java 异常处理详解(如果想知道Java中有关异常处理的知识点,那么只看这一篇就足够了!)
|
8天前
|
Java 编译器
Java多态(如果想知道Java中有关多多态的知识点,那么只看这一篇就足够了!)
Java多态(如果想知道Java中有关多多态的知识点,那么只看这一篇就足够了!)
|
8天前
|
Java 编译器 API
Java数组(如果想知道Java中有关数组的知识点,那么只看这一篇就足够了!)
Java数组(如果想知道Java中有关数组的知识点,那么只看这一篇就足够了!)
|
1天前
|
存储 安全 Java
Java基础系列1:Java面向对象
Java基础系列1:Java面向对象
|
1天前
|
Java 数据安全/隐私保护
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
6 0
|
1天前
|
存储 Java
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
5 0
|
1天前
|
Java 关系型数据库
Java中的面向对象设计原则与实践
Java中的面向对象设计原则与实践