Java:面向对象

简介: 本文介绍了Java编程中的核心概念,包括包的命名规范与自动导入机制、构造方法的特点与使用、`this`和`super`关键字的作用、继承的基本规则、访问权限的设置、封装的意义、多态的实现原理以及`static`关键字的用法。通过详细解析每个知识点,并结合代码示例,帮助读者深入理解Java面向对象编程的核心思想与实践技巧。内容适合初学者及进阶开发者学习参考。

1.包:

  1. 如果公司域名中有非法字符,建议使用下划线(_)来使包名合法化。
  2. java编译器为每个源文件自动导入2个包
  • import java.lang.*;
  • import 当前文件所在包.*;  这样同一包下的类,互相使用,就不用导包了
  1. 静态导入:
  • 可以省略类名来访问静态成员(成员变量、方法、嵌套类)
  • 正确使用静态导入,可以消除重复类名,提高代码可读性。
  • 过度使用静态导入,读者会分不清静态成员是哪个类中的。(所以不建议使用静态导入)

java

  • 体验AI代码助手
  • 代码解读
  • 复制代码
// 静态导入举例
import static java.lang.Math.PI;

// 使用(PI可以直接使用)
System.out.println(2 * PI);

2.构造方法:Constructor

  1. 构造方法无返回值
  2. 如果一个类未定义构造方法,编译器会为其提供一个默认的无参构造方法。
  3. 一旦定义了构造方法,默认无参构造方法将不存在。
  4. 构造方法有个默认参数this:如Peron的无参构造方法,实际样子->public Persion(Persion this){}

3.this:是一个指向当前对象的引用

  1. 可访问当前类中定义的成员变量
  2. 调用当前类中定义的方法(包括构造方法)

4.继承:

  1. java.lang.Object 是所有类的父类(新建一个类,它默认继承Object类)
  2. 子类可以定义与父类重名的成员变量(不建议这么做)
  3. 重写:子类的方法签名和父类一样。也叫覆盖
  4. super:代表父类
  5. 子类重写的方法权限必须 ≥ 父类的方法权限
  6. 子类重写的方法返回值类型必须 ≤ 父类的方法返回值类型

关于this 与 super

java

体验AI代码助手

代码解读

复制代码

//只有在构造方法里面,才能用super/this来调用构造方法
public class Persion{
    public String name;
    public int age;
    
    public Persion(){
        
    }
}

public class Student extends Persion{
    
    public String name;
    public int age;
    
    public Student(String name, int age){  
        this.name = name;
        this.age = age;
        super.age = age;
    }
    
    public Student(String name){
        this(name, 0); //使用this  调用构造方法
        super();        //使用super 调用父类构造方法
    }
}

1、子类的构造方法必须先调用父类的构造方法,再执行后面的代码。

即子类构造方法的第一句默认为 super(); 目的是让父类比子类先初始化。

如果显式的调用 super(), 默认的就无效了。

所以上面例子会报错,因该改为:

java

体验AI代码助手

代码解读

复制代码

public Student(String name){
    super();        //使用super 调用父类构造方法
    this(name, 0);  //使用this  调用构造方法
}

2、上面改后依然报错,提示 this(name, 0) 必须放在第一行。

因为有参构造方法里面也有 super() 这里第一行也是 super()

导致父类被加载两次,重复了。删除super()即可。

java

体验AI代码助手

代码解读

复制代码

public Student(String name){
    this(name, 0);
}

关于继承 父类变量私有化:

java

体验AI代码助手

代码解读

复制代码

// 问:子类对象的内存中,是否包含父类中定义的private成员变量
public class Persion{
    private String name;
    //提供getter和setter方法
}

public class Student extends Persion{
    public int age;
}

Student st = new Student();
st.name; //报错
st.getName(); //证明name变量存到了student对象中了。
//private只是做访问控制,让外界不能直接访问name,但不代表name就不存在了。

5.访问权限:

public:在任何地方都可见protected:仅在本包中,自己子类中可见default(无修饰符):仅在本包中可见 (所以无修饰符又叫包私有权限)private:仅在自己类中可见

1.上述4个访问权限都可以修饰类的成员,比如成员变量、成员方法、嵌套类等(即类中的一切)

2.只有publicdefault可以修饰顶级类。(顶级类定义出来就是被使用的,定义成其他类型就无法被使用,失去了存在的意义)

3.以上4个访问权限不可修饰局部类,局部变量。(局部变量的作用域仅限在方法里,与访问权限的意义相矛盾)

java

体验AI代码助手

代码解读

复制代码

//一个java文件中,最外面的那个类叫顶级类
public class Persion{
    //嵌套类
    class ABC{
        class Test{
            
        }
    }
    
    public void test(){
        // 修饰局部变量no
        private int no = 10; //会报错
    }
}

6.封装:

1、成员变量private化,提供public的getter、getter方法。

toString(): println(对象引用),当参数为对象引用时,println会调用对象的toString方法

7.多态:

  1. 什么是多态?
  • 具有多种形态
  • 同一操作 作用于不同对象,产生不同的结果
  1. 多态的体现:
  • 父类(接口)类型引用 指向 子类对象
  • 调用子类重写的方法
  1. JVM会根据引用变量指向的具体对象来调用对应的方法。
  • 这个行为叫:虚方法调用(Virtual method invocation)
  • 类似于C++中的虚函数调用

8.static:

  1. 常用来修饰类的成员:成员变量,成员方法,嵌套类
  2. 被static修饰的变量:类变量,静态变量,静态字段。(放在方法区,只有一份内存)
  3. 未被static修饰的变量:每一个对象实例,都会有此变量,所以叫实例变量(每个对象内部都有一份内存)
  4. 被static修饰的方法:类方法,静态方法。(内部不可以使用this,因为被static修饰的东西先加载。加载后发现找不到当前对象,会报错。)
  5. 静态代码块:
  • 当一个类被初始化的时候,执行静态代码块。
  • 当一个类第一次被主动引用的时候,JVM会对类进行初始化。
  • 静态代码块在整个程序运行期间,只执行一次。
  • 静态代码块常用来做类内部的一些初始化。

静态变量应用:比如统计创建了多少个对象

java

体验AI代码助手

代码解读

复制代码

public class Persion{
    public static int count;
    
    static {
        count = 0;  //也可在静态代码块中为静态变量赋值()
    }
    
    public Persion(){
        count++;
    }
}    


转载来源:https://juejin.cn/post/7165044749827571720

相关文章
|
3月前
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
|
6月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
85 1
|
7月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
62 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
7月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
132 2
|
9月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
9月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
78 4
|
9月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
10月前
|
Java 数据处理 开发者
【Java基础面试十二】、说一说你对面向对象的理解
这篇文章阐述了面向对象是一种以类和对象为基础,通过封装、继承和多态等概念来模拟现实世界中的事物及其相互关系的程序设计方法,它强调以事物为中心进行思考和系统构造,与结构化程序设计相比,更符合人类的自然思维方式。
【Java基础面试十二】、说一说你对面向对象的理解
|
10月前
|
Java
【Java基础面试十三】、面向对象的三大特征是什么?
这篇文章介绍了面向对象程序设计的三大基本特征:封装、继承和多态,其中封装隐藏对象实现细节,继承实现软件复用,多态允许子类对象表现出不同的行为特征。
【Java基础面试十三】、面向对象的三大特征是什么?
|
9月前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
118 2