Java面向对象知识总结+思维导图

简介: Java面向对象知识总结+思维导图

🔖面向对象


📖 Java作为面向对象的编程语言,我们首先必须要了解类和对象的概念,本章的所有内容和知识都是围绕类和对象展开的!

▐ 思维导图1

▐ 类和对象的概念

•  简单来说,类就是对具有相同特征的一类事物的描述,而对象是类的具体实例.

•  比如说 '车' 就是一个大的概念,它可以具体化为奔驰、宝马、帕拉梅拉。那么车就是一个类,奔驰车就是以车类为模版的一个实例化对象。

•  一个类中包含成员变量和成员方法

上图程序最终输出:50W帕拉梅拉 is running

 

构造方法

构造方法的作用是初始化对象,并且分为无参构造方法和有参构造方法

构造方法的方法名与类名相同,没有返回值,且不需要void修饰

•  如果一个类没有定义构造方法,Java会提供一个默认的无参构造方法

•   在一个类中可以有多个构造方法 ( 构造方法可以重载 ).

public class Car {
    String name;
    String price;
    //无参构造方法
    public Car(){
        name="帕拉梅拉";
        price="50W";
        System.out.println(name+price);
    }
    //有参构造方法
    public Car(String name,String price){
        this.name=name;
        this.price=price;
        System.out.println(name+price);
    }
 
    public static void main(String[] args) {
        new Car();//输出: 帕拉梅拉50W
        new Car("奔驰","40W");//输出: 奔驰40W
    }
}

方法的重载

•  当一个类中有多个名字相同的方法时,可以通过参数的个数、类型、顺序,在调用时进行区分

•  方法的重载与返回值类型无关

public class Car {
    String name;
    String price;
    int count;
    //有参构造方法
    public Car(String name,String price){
        this.name=name;
        this.price=price;
        System.out.println(name+price);
    }
    //参数的类型不同
    public Car(String name,int count){
        this.name=name;
        this.count=count;
        System.out.println(name+count);
    }
    //参数顺序不同
    public Car(int count,String name){
        this.name=name;
        this.count=count;
        System.out.println(name+count);
    }
    public static void main(String[] args) {
        new Car("奔驰","40W");//输出:  奔驰40W
        new Car("帕拉梅拉",6);//输出:  帕拉梅拉6
        new Car(6, "帕拉梅拉");//输出: 帕拉梅拉6
    }
}

this与super关键字

•  this在类中表示当前正在访问的对象,主要是为了区分成员变量和局部变量

封装

•  即为成员变量或成员方法添加一个访问权限修饰符,使外界不得随意操作,主动权在类的手中 .

📖访问权限修饰符


•  public        公共权限 ------- 修饰的成员在任何地方都可以访问到.  


•  protected  受保护权限 ---- 在本类 / 同包的其他类中可以访问到,及不同包的子类.


•  default       默认权限 ------- 在本类 / 同包的其他类中可以访问到.


•  private       私有权限  ------ 只能在本类访问到. (常用)


   protected和默认(default)的区别就是,protected可以在不同包的子类中访问  

•  封装起来之后,通常是通过类中向外提供的特殊方法进行访问,这样就可以加入控制语句

public class Car {
    private String name;
    //向外提供set和get方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        //加入控制语句
        if(name.length()<5){
            this.name = name;
        }
    }
}

▐ 代码块

•  代码块就是在类中声明的一个没有名字的代码块,分为实例代码块和静态代码块


•  实例代码块: 在每次创建对象时执行,静态代码块: 在类被加载时自动执行


格式: {  实例代码块内容  }                   static {   静态代码块内容   }

📖类什么时候会被加载?

•  运行类中的main方法时.

•  访问类中的静态成员变量或静态成员方法时.

•  创建类的对象时.

public class Car {
    {
        System.out.println("实例代码块");
    }
    static {
        System.out.println("静态代码块");
    }
 
    public static void main(String[] args) {
        new Car();
        new Car();
        new Car();
        /*
     依次输出:
        静态代码块
        实例代码块
        实例代码块
        实例代码块
         */
    }
}

static关键字

•   static静态的意思,static关键字可以修饰类中的成员变量,成员方法,代码块,内部类.

 (不能修饰构造方法)

•  static修饰成员变量:

静态成员变量也称类变量,在内存中只有一份,所有对象可以共享,一般情况下,将类中所有对象都相同的属性设置为静态的。

•  static修饰成员方法:

修饰的成员方法也称为类方法,可以直接使用类名访问,在静态的方法中只能访问静态的成员变量,非静态的方法中可以使用静态的成员变量。


•  static关键字修饰的属性特点:


•  随着类的加载而加载


•  优先于对象存在


•  静态成员被所有对象共享


•  可以直接使用类名访问


注意:


•  静态的方法中,只能使用静态的成员变量,因为他们都是随着类的加载而加载的;


•  一旦方法中使用了非静态的成员变量,那么此方法就不能定义为静态的;但非静态的方法中可以使用静态的成员变量

▐ 思维导图2

📖面向对象的三大特征:封装,继承,多态是本章的重点,第二部分将围绕继承和多态展开

继承

•  简单来说,继承就是将某一事物的共同属性抽取出来单独定义一个类 (父类),其它子类可以继承父类,这样不仅实现了代码的复用,子类也可以扩展自己特有的功能。


•  举个简单的例子,现在有三个动物:猫,狗,鸟,它们都有一个共同属性:名字name,那么就可以将name属性定义在一个Animal动物类中,也就是父类,这样就不需要在猫,狗,鸟类中分别定义name属性了,它们只需继承Animal父类即可。


•  继承具有传递性,即一个类只能直接继承一个类;但可以间接继承多个类。


•  继承使用的是extends关键字,子类继承父类后,拥有了父类的成员变量和成员方法

•  子类不能继承父类中的私有属性

public class Cat extends Animal{
   //Cat继承Animal的成员变量和成员方法,但不能访问私有成员
}

📖当一个类没有显示继承其他类的时候默认继承object类,Object类是java类体系中最大的       类,Object类之上再也没有别的类。

▐ 多态

•  多态的使用前提是两个类存在继承关系

•  多态也称向上转型,也就是将子类类型向上转为父类类型

Animal dog = new Dog();

•  多态实现了用父类类型表示任意子类类型的对象,利于程序扩展

📖通过一个案例给大家解释下吧!

public class Animal {
    public void makeSound() {
        System.out.println("Animal is making a sound");
    }
}
public class Dog extends Animal{
    @Override//方法的重写
    public void makeSound() {
        System.out.println("Dog is barking");
    }
 
    public static void main(String[] args) {
        Animal dog = new Dog();//现在我们可以使用Animal类的引用来引用Dog对象
 
        dog.makeSound();  //输出Dog is barking
    }
}

在上述案例中,Animal引用的是一个Dog对象,但是调用的是Dog类中重写的makeSound()方法,这就是多态的效果!

如果你对这个案例还有疑惑,这里有个小口诀:

编译看左边,运行看右边

Animal dog = new Dog();

意思是:编译时我们看左边Animal类中的属性,运行是看右边Dog类中的内容


▐ 方法的重写

在上述多态的案例中我们就用了方法的重写,在子类Dog中对父类Animal中的makeSound方法进行了重写,最终运行的是重写后的方法中的内容。所以方法的重写也就是当父类中方法的实现不能满足子类需求时,在子类中对父类的方法进行重写 / 覆盖,这样调用时就会调用子类中重写的方法.


重写时需要注意:


•  子类重写的方法结构与父类方法的结构必须一致 ( 即方法名,参数列表,返回值类型必须一致)


•  构造方法和静态方法不能重写,成员变量不存在重写。


•  使用 @Override 注解标签



▐ 结语:

      希望这篇关于对 Java面向对象的基础知识总结 能对大家有所帮助,欢迎大佬们留言或私信与我交流~~学海漫浩浩,我亦苦作舟!大家一起学习,一起进步!

相关文章
|
3月前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
176 1
|
3月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
175 0
|
4月前
|
安全 Java 编译器
Java面向对象
本文深入讲解了Java面向对象编程(OOP)的四大特性:封装、继承、多态与抽象,以及方法的设计与使用。通过示例展示了如何用类和对象组织代码,提升程序的可维护性与扩展性。
|
5月前
|
存储 Java 测试技术
Java基础 - 面向对象
面向对象编程是Java的核心,包含封装、继承、多态三大特性。封装隐藏实现细节,提升代码可维护性与安全性;继承实现类间IS-A关系,支持代码复用;多态通过继承、重写与向上转型,实现运行时方法动态绑定,提升系统扩展性与灵活性。
108 0
|
Java
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
202 1
|
7月前
|
人工智能 Java 编译器
Java:面向对象
本文介绍了Java编程中的核心概念,包括包的命名规范与自动导入机制、构造方法的特点与使用、`this`和`super`关键字的作用、继承的基本规则、访问权限的设置、封装的意义、多态的实现原理以及`static`关键字的用法。通过详细解析每个知识点,并结合代码示例,帮助读者深入理解Java面向对象编程的核心思想与实践技巧。内容适合初学者及进阶开发者学习参考。
195 0
|
9月前
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
|
10月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
520 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
138 1
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
136 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)