杨校老师课堂之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

目录
相关文章
|
18天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
12 2
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
2月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
35 4
|
2月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
1月前
|
安全 Java 编译器
Java基础-知识点(二)
Java基础-知识点(二)
13 0
|
1月前
|
存储 缓存 安全
Java基础-知识点(一)
Java基础-知识点(一)
17 0
|
1月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
16 0
|
2月前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
56 2
|
2月前
|
Java 开发者
Java 面向对象
Java 是一种面向对象的编程语言,通过对象与类的概念组织代码和数据。面向对象编程的核心包括类、对象、继承、多态、封装和抽象。类是对象的蓝图,定义了属性和行为;对象则是类的实例。继承允许子类继承父类的属性和方法,增强代码复用性;多态则支持通过相同接口调用不同类型对象的行为,包括方法重载和重写。封装通过公共方法隐藏对象细节,提高安全性;抽象则对对象特征进行提炼,通过抽象类和接口实现。理解这些概念有助于设计高效、可维护的 Java 应用程序。
|
2月前
|
Java 开发者
Java编程之旅:探索面向对象的力量
【9月更文挑战第16天】在编程的世界中,Java以其强大的面向对象编程特性而闻名。本文将带你走进Java的世界,一起探索类与对象的奥秘,学习如何通过封装、继承和多态性构建健壮的软件系统。无论你是初学者还是有经验的开发者,本文都旨在提供实用的代码示例,帮助你提升Java技能。准备好开始这段旅程了吗?让我们启程吧!