Java 面向对象(一)

简介: 了解面向对象的三大特征 掌握类与对象的关系、定义及使用 掌握对象的创建格式,可以创建多个对象 掌握对象的内存分配过程 掌握封装性的概念及使用

#🔭学习内容



了解面向对象的三大特征

掌握类与对象的关系、定义及使用

掌握对象的创建格式,可以创建多个对象

掌握对象的内存分配过程

掌握封装性的概念及使用

✈️目录

🔭1、基本概念

🪶(1)面向过程

🪶(2)面向对象

🔭2、类与对象

🪶(1)关系

🪶(2)类的定义

🪶(3)对象的创建和使用

🔭3、封装性


🔭1、基本概念

🪶(1)面向过程

   用户提出哪些要求,就针对用户的要求进行制作,直接制作出一个完整的整体

🪶(2)面向对象

   针对用户提出的要求进行分析,并将分析的结果设计成一张完整的图纸,与需求的用户确认,然后将一切的准备工作全部处理完之后再分块制作,最后将各个小的部分组装在一起


面向对象比面向过程更能适应用户的变化


面向对象有三个主要特性:

✒️封装性

   一是指把对象的属性和行为看成一个密不可分的整体,将这两者“封装"在一个不可分割的独立单位(即对象)中;

   另一层含义指“信息隐蔽",把不需要让外界知道的信息隐藏起来,有些对象的属性及行为允许外界用户知道或使用,但不允许更改,而另一些属性或行为,则不允许外界知道,或只允许使用对象的功能,而尽可能隐蔽对象的功能实现细节。

   封装机制一个特点是,为封装在一个整体内的变量及方法规定不同级别的“可见性”或访问权限。

✒️继承性

   首先拥有反映事物一般特性的类,然后在其基础上派生出反映特殊事物的类。如己有汽车的类,该类中描述了汽车的普遍属性和行为,进一步再产生轿车的类,轿车的类是继承于汽车类,轿车类不但拥有汽车类的全部属性和行为,还增加轿车特有的属性和行为。

   在Java程序设计中,己有的类可以是Java开发环境所提供的一批最基本的程序——类库,用户开发的程序类是继承这些己有的类。这样,现在类所描述过的属性及行为,即己定义的变量和方法,在继承产生的类中完全可以使用。被继承的类称为父类或超类,而经继承产生的类称为子类或派生类。

   面向对象程序设计中的继承机制大大增强了程序代码的可复用性,提高了软件的开发效率,降低了程序产生错误的可能性,也为程序的修改扩充提供了便利。

   若一个子类只允许继承一个父类,则称为单继承;若允许继承多个父类,则称为多继承。目前许多面向对象程序设计语言不支持多继承。而Java语言通过接口(interface)的方式来弥补由于Java不支持多继承而带来的子类不能享用多个父类的成员的缺点。

✒️多态性

   多态是允许程序中出现重名现象。Java 语言中含有方法重载与对象多态两种形式的多态。

    方法重载:在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同。

    对象多态:子类对象可以与父类对象进行相互转换,而且根据其使用的子类的不同,完成的功能也不同。

   多态的特性使程序的抽象程度和简捷程度更高,有助于程序设计人员对程序的分组协同开发。


🔭2、类与对象

🪶(1)关系

✒️类:指的是一类事务,是一个抽象的概念。

✒️对象:指的是属于某个类的具体实现。

关系:类是对象的抽象,对象是类的实例

一个类可以有很多对象,而一个对象必然属于某个类。


🪶(2)类的定义

类的定义语法如下:


class 类名称{
     数据类型 属性;    //声明成员变量(属性)
    public 返回值的数据类型 方法名称(参数1,参数2…){
         程序语句;      //定义方法的内容
        [return表达式;]
    }
}
定义一个Person类
class Person{
  String name;          //声明姓名属性 
  int age;             //声明年龄属性
  public void tell(){  //取得信息的方法
   System.out.println("姓名:" + name +",年龄:"+ age);
  }
}


🪶(3)对象的创建和使用

类名 对象名称=null        // 声明对象
对象名称=new 类名()     //实例化对象


用以上格式产生对象分为声明对象和实例化对象两步。

当然也可以直接通过以下方式一步完成:

类名 对象名称=new 类名()


以上格式与数组定义的格式相似,因为类和数组都属于引用数据类型,只要是引用数据类型的使用格式都可以使用如上的定义样式。


创建对象的具体范例


class Person{
  String name;              //声明姓名属性 
  int age;                  //声明年龄属性
  public void tell(){       //取得信息的方法
   System.out.println("姓名:" + name +",年龄:"+ age);
  }
}
public class Demo{
  public static void main(String[] args){
    Person p=new Person();  //创建并实例化对象
  }
}


所有的对象名称都在栈内存中保存,而对象的具体内容则保存在对应的堆内存之中,必须使用new关键字才能开辟堆内存空间。


访问对象中的属性或方法

访问属性:对象名称.属性名
访问方法:对象名称.方法名()


范例(可以创建多个对象)

class Person{
  String name;              //声明姓名属性 
  int age;                  //声明年龄属性
  public void tell(){       //取得信息的方法
   System.out.println("姓名:" + name +",年龄:"+ age);
  }
}
public class Demo{
  public static void main(String[] args){
    Person p1=null;
    Person p2=null;
    p1.name="张三";           //为name赋初值
    p2.name="李四";
    p1.age=30;                //为age赋初值
    p2.age=32;
    p1.tell();                //调用tell方法
    p2.tell();
  }
}


对象引用传递


class Person{
  String name;              //声明姓名属性 
  int age;                  //声明年龄属性
  public void tell(){       //取得信息的方法
   System.out.println("姓名:" + name +",年龄:"+ age);
  }
}
public class Demo{
  public static void main(String[] args){
    Person p1=null;
    Person p2=null;
    p1=new person();        //只实例化pl一个对象 
    p2=p1;                  //把pl的堆内存空间使用权给p2
    p1.name="张三";
    p1.age=30;
    p2.age=33;              //设置p2对象的内容,实际上就是设置pl对象的内容 
    System.out.print("p1的内容:");
    p1.tell();
    System.out.print("p2的内容:");
    p2.tell();
  }
}


运行结果:

p1的内容:姓名:张三,年龄:33
p2的内容:姓名:张三,年龄:33


从程序运行结果可以发现,两个对象的输出内容是一样的,实际上所谓的引用传递,就是将一个堆内存空间的使用权给多个栈内存空间,每个栈内存空间都可以修改堆内存的内容


一个栈内存空间只能指向一个堆内存空间,如果要想再指向其他的堆内存空间,则必须先断开已有的指向才能分配新的指向。


🔭3、封装性

    用对象直接访问类中的属性在面向对象法则中是不允许的。所以为了避免程序中这种错误的发生,在一般的开发中往往要将类中的属性封装(private),封装的格式如下:


属性封装:private 属性类型 属性名称;
方法封装:private 方法返回值 方法名称(参数列表){ }

只要是被封装的属性,则必须通过setter和getter方法设置和取得,范例如下:


class Person{
  private String name;              //声明姓名属性 
  private int age;                  //声明年龄属性
  public void tell(){               //取得信息的方法
   System.out.println("姓名:" + this.getName() +",年龄:"+ this.getAge());   // this 强调该方法是本类中的方法,可不写
  }
  public String getName(){
   return name;
  }
  public void setName(String n){
   name=n;
  }
  public int getAge{
   return age;
  }
  public void setAge(int a){
   if(a>0 && a<150){
     age=a;
   }
  }
}
public class Demo{
  public static void main(String[] args){
    Person p=new Person();  //创建并实例化对象
    p.setName("张三");
    p.setAge(30);
    p.tell();
  }
}


类图的表示

Person
- name:  String
- age  :   int
+ tell ()                   :void
+ getName ()              :String
+ setName (String n)       :void
+ getAge()                :int
+ setAge (int a)            :void

-表示private

+表示public


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