Java基础之面向对象详解

简介: Java基础之面向对象详解

    对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。

什么是类?

类是对象的抽象,它用于描述一组对象的共同特征和行为。类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征,也被称之为属性,成员方法用于描述对象的行为,简称为方法。


public class Student {
    //成员变量
    private String name;//姓名
    private int age;//年龄
    //成员方法
    //学习的方法
    public  void study(){
        System.out.println("好好学习,天天向上");
    }
    //吃饭的方法
    public void eat(){
        System.out.println("干饭人干饭时间");
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    //封装私有变量
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    //带参构造函数
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //无参构造函数
    public Student() {
    }

什么是对象?

对象 :是一类事物的具体体现。对象是类的一个 实例 (对象并不是找个女朋友),必然具备该类事物的属性和行为。

public static void main(String[] args) {
     //创建对象
     Student stu1=new Student("张三",9);
     Student stu2=new Student("李四",9);
     //使用对象访问类中的成员
     stu1.setAge(18);
     stu1.eat();
     stu2.setName("赵四");
     stu2.study();
}

面向对象的三大特性(封装、继承、多态)

一、封装

封装:封装是面向对象方法的一个重要原则,它有两个含义:第一个含义是,把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象);第二个含义也称作信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系。


   1.使用private关键字来修饰成员变量


   2.对需要访问的成员变量,提供对应的一对getXxx方法、SetXxx方法。

public class Student {
    //私有成员变量
    private String name;//姓名
    private int age;//年龄
    //提供供外界访问的公有方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

访问修饰符

image.png


关键字this的含义

this代表所在类的当前对象的引用(地址值),即对象自己的引用。

方法被哪个对象调用,方法中的this就代表哪个对象。即谁在调用,this就代表谁。

变量封装了当前值,方法封装了代码和行为,类封装两者以同时提供一堆状态和函数。接口封装了方法。


二、继承

继承:继承是一种使用户得以在一个类的基础上建立新的类的技术。新的类自动继承旧类的属性和行为特征,并可具备某些附加的特征或某些限制。


继承:就是子类继承父类的属性和行为,使得子类具有与父类相同的属性、相同的行为。子类可以直接访问父类的非私有的属性和行为。


提高了代码的复用性。类与类之间产生了关系,是多态的前提。


class 父类{
    ···
}
class 子类 extends 父类{
    ···
}

继承后的特点--成员变量

     如果子类父类出现不同名的成员变量,代码的访问没有影响。


     如果子类父类出现了同名的成员变量,在子类中需要访问父类中非私有成员变量是,需要使用super关键字,修饰父类的成员变量。


class Zi extends Fu {
    // Zi中的成员变量
    int num = 6; 
    public void show() { 
        //访问父类中的num 
        System.out.println("Fu num=" + super.num); 
        //访问子类中的num 
        System.out.println("Zi num=" + this.num); 
    } 
}

继承后的特点--成员方法

       如果子类父类出现不同名的成员方法,代码的访问没有影响。


       如果子类父类出现了同名的成员方法,这时出现了方法重写(Override)


      方法重写:子类中出现与父类一模一样的方法是(返回值类型、方法名和参数列表都相同),会出现覆盖效果。声明不变,重新实现。


//父类
class Fu { 
    public void show() {
        System.out.println("Fu show"); 
    } 
}
//子类
class Zi extends Fu { 
    //子类重写了父类的show方法 
    public void show() { 
        System.out.println("Zi show"); 
    } 
}
//测试类ExtendsDemo
public class ExtendsDemo{ 
    public static void main(String[] args) { 
        Zi z = new Zi(); 
        // 子类中有show方法,只执行重写后的show方法 
        z.show(); // Zi show 
    } 
}

super和this的含义

 super:代表父类的存储空间标识,只能出现在方法中(可以理解父类的引用)

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

父类空间由于子类对象产生

      在每次创建子类对象时,先初始化父类空间,再创建子类对象本身。目的在于子类对象中包含了其对应的父类空间,便可以包含其父类的成员,如果父类成员非private修饰,子类可以随意使用父类成员。代码体现在子类的构造方法调用时,一定先调用父类的构造方法。


三、多态

多态:在收到消息时对象要予以响应,不同的对象收到同一消息可以产生完全不同的结果, 这一现象叫做多态。


多态存在的条件:

1.存在继承关系

2.方法需要重写

3.父类的引用指向子类

//子类的引用  指向——>    子类
父类类型  变量名 = new 子类对象;
变量名.方法名();

父类类型:指子类对象继承父类类型,或者实现的父接口类型。 多态是方法的多态,属性没有多态。


//抽象的父类
public abstract class Animal { 
    public abstract void eat();
}
//子类Cat
class Cat extends Animal { 
    public void eat() { 
        System.out.println("吃鱼"); 
    } 
}
//子类Dog
class Dog extends Animal {
    public void eat() {
        System.out.println("吃骨头"); 
    } 
}
//测试类Test
public class Test { 
    public static void main(String[] args) {
        // 多态形式,创建对象 
        Animal a1 = new Cat(); 
        // 调用的是 Cat 的 eat 
        a1.eat(); 
        // 多态形式,创建对象 
        Animal a2 = new Dog(); 
        // 调用的是 Dog 的 eat 
        a2.eat(); 
    }
}

在多态的代码中,成员方法的访问规则是:   看new的是谁,就优先用谁,没有则向上找。

相关文章
|
17天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
19 1
|
1月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
24 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
2月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
89 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
1月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
37 2
|
3月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
3月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
3月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
36 4
|
3月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
2月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
20 0
|
4月前
|
Java 数据处理 开发者
【Java基础面试十二】、说一说你对面向对象的理解
这篇文章阐述了面向对象是一种以类和对象为基础,通过封装、继承和多态等概念来模拟现实世界中的事物及其相互关系的程序设计方法,它强调以事物为中心进行思考和系统构造,与结构化程序设计相比,更符合人类的自然思维方式。
【Java基础面试十二】、说一说你对面向对象的理解
下一篇
DataWorks