【Java基础】面向对象

简介: 面向对象编程有三大特性,分别是封装、继承和多态。封装利用抽象数据类型将数据和基于数据的操作封装在一起,防止外部代码对数据的直接访问和修改,提高代码的可维护性和可读性。继承可以减少代码的冗余,提高代码的复用性和可扩展性,但需要遵循里氏替换原则。多态分为编译时多态和运行时多态,通过继承和重写实现,可以提高代码的灵活性和可扩展性。创建对象的方式有多种,常见的有使用new关键字、Class类的newInstance()方法、Constructor类的newInstance()方法、clone()方法和反序列化。在面向对象的开发过程中,需要进行面向对象分析、设计和编程。

三大特性

封装

利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问该对象。

具体实现:将数据和代码封装在一个类中,通过访问控制修饰符(public、private、protected)来控制数据的访问权限,防止外部代码对数据的直接访问和修改。这样可以保证数据的安全性和完整性,同时也提高了代码的可维护性和可读性。

继承

继承实现了 IS-A 关系,例如 Cat 和 Animal 就是一种 IS-A 关系,因此 Cat 可以继承自 Animal,从而获得 Animal 非 private 的属性和方法。

通过继承机制,子类可以继承父类的属性和方法,并可以在此基础上进行扩展和重写。这样可以大大减少代码的冗余,提高代码的复用性和可扩展性。

继承应该遵循里氏替换原则,子类对象必须能够替换掉所有父类对象。

多态

多态分为编译时多态运行时多态:

编译时多态主要指方法的重载
运行时多态指程序中定义的对象引用所指向的具体类型在运行期间才确定

运行时多态三个条件:
继承
覆盖(重写)
向上转型

面对对象开发过程

  • OOA(面向对象分析)
  • OOD(面向对象设计)
  • OOP(面向对象编程)

对象:对象是类的一个实例,它具有自己的属性和行为(方法),先有对象再有类。
类:类是多个对象的集合体,它描述一类对象的行为和状态。
实例展示
首先创建一个老师的类

public class Teather {
   
//    姓名、年龄、性别、职称、所在院系、是否党员、所授课程;
//    方法:上课;
    protected String name;
    protected String age;
    protected String sex;
    protected String rank;
    protected String college;
    protected String isPartyMember;
    protected String SelectedCourse = "";

//创建老师类的set和get方法
 public void setName(String value) {
   
        name = value;
    }


    public void setAge(String value) {
   
        age = value;
    }

    public void setSex(String value) {
   
        sex = value;
    }

    public void setRank(String value) {
   
        rank = value;
    }

    public void setCollege(String college) {
   
        this.college = college;
    }

    public void setIsPartyMember(String isPartyMember) {
   
        this.isPartyMember = isPartyMember;
    }



    public void setSelectedCourse(String selectedCourse) {
   
        System.out.println("You are selecting the course of " + selectedCourse + "!");
         if(SelectedCourse !=" ")
        SelectedCourse = SelectedCourse + "," + selectedCourse;
        else
        SelectedCourse = SelectedCourse  + selectedCourse;
    }

    public String getName() {
   
        return name;
    }
    public String getAge() {
   
        return age;
    }
    public String getSex() {
   
        return sex;
    }
    public String getRank() {
   
        return rank;
    }

    public String getSelectedCourse() {
   
        return SelectedCourse;
    }



    public String getIsPartyMember() {
   
        return isPartyMember;
    }


    public String getCollege() {
   
        return college;
    }

    public void deliverCourse(String selectedCourse) {
   
        System.out.println("You are delivering " + selectedCourse + "!");
        SelectedCourse = SelectedCourse + "," + selectedCourse;
    }
}

再创建一个导师的类来继承老师的类(同时进行重载和重写)

public class Supervisor extends Teather{
   
//导师类继承老师类
//同时对导师中的属性进行添加
    protected String direction;
    protected String tClass;
//在导师类中创建study方法
public void study(String tDirection){
   
        System.out.println("你正在研究课题"+tDirection+"。");
    }
   //对study方法进行重载
    public void study(String tDirection,String tRank){
   
        System.out.println("你正在研究"+tRank+tDirection+"。");
   //对老师类中的deliverCourse方法进行重写(delivering改为studying)
 public void deliverCourse(String selectedCourse) {
   
        System.out.println("You are studying " + selectedCourse + "!");
        SelectedCourse = SelectedCourse + "," + selectedCourse;
    }

}

注意:接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public

创建对象

使用 new 关键字:这是创建对象最常见的方式,通过使用 new 关键字可以在堆内存中分配一块新的内存空间来存储对象,然后返回对象的引用。例如:Person person = new Person();

使用 Class 类的 newInstance() 方法:Class 类是 Java 中描述类的元信息的类,可以通过它的 newInstance() 方法动态地创建对象。例如:Person person = (Person) Class.forName("com.example.Person").newInstance();

使用 Constructor 类的 newInstance() 方法:Constructor 类是 Java 中描述构造方法的类,可以通过它的 newInstance() 方法动态地创建对象。例如:Constructor constructor = Person.class.getConstructor(); Person person = constructor.newInstance();

使用 clone() 方法:clone() 方法可以复制一个对象,创建一个新的对象,并且两个对象的内容相同。注意,使用 clone() 方法需要实现 Cloneable 接口。例如:Person person = new Person(); Person newPerson = (Person) person.clone();

使用反序列化(Serialization):反序列化可以将一个对象从字节流中还原出来,实现对象的创建。例如:ObjectInputStream in = new ObjectInputStream(new FileInputStream("person.out")); Person person = (Person) in.readObject();

接口的抽象方法都需要重写,类中的属性默认具有final和static属性即变量初始化后不可更改

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