搜索
首页Javajava教程java——面向对象详细介绍(一)

java——面向对象详细介绍(一)

Aug 22, 2019 pm 05:16 PM
面向对象

1、什么叫面向对象?

面向对象(Object-Oriented,简称OO)就是一种常见的程序结构设计方法。
面向对象思想的基础是将相关的数据和方法放在一起,组合成一种新的复合数据类型,然后使用新创建的复合数据类型作为项目的基础。

面向对象是一个很抽象的概念,它相对面向过程而言。

过程与对象都是一种解决问题的思想。

面向过程:强调的是功能行为,一种过程,先干啥,再干啥;

面向对象:将功能封装到对象里,强调的是具备某功能的对象;

按照面向对象的思想,可以把任何的东西看做对象!

面向对象的三个特征:

封装(Encapsulation);

继承(Inheritance);

多态(Polymorphism)。

我的总结:

面向过程:强调的是具体的功能实现;(执行者)

面向对象:强调的是具备功能的对象。(管理者)

2、类

类(class)是Java 语言的最小编程单位,也是设计和实现Java 程序的基础,本部分将深入介绍类的相关知识。
类的概念
类是一组事物共有特征和功能的描述。类是对于一组事物的总体描述,是按照面向对象技术进行设计时最小的单位,也是组成项目的最基本的模块。类的概念是抽象的,类似于建筑设计中的图纸,是对于现实需要代表的具体内容的抽象。类只包含框架结构,而不包含具体的数据。所以类代表的是总体,而不代表某个特定的个体。

我的总结:类是抽象的,对象是具体的,实实在在的!

类的定义:

[修饰符] class  类名{

      1~n个构造方法;

        0~n个字段;

        0~n个方法

}

定义类,其实就是定义类里面的对象

对象包含:

状态;(属性)

功能、行为;(方法)

通过类来描述对象;

状态--------成员变量;

功能、行为——方法;

Eg

class Person{
//属性
   private String name;
   private int age;
   private int sal;
   //方法
   public void show(){
      System.out.println("个人情况:"+name+age+sal);
   }
}

3、构造方法

构造方法:用来构造类的实例(每一个类都默认有一个无参的构造方法,得使用new调用)

字段:类或对象所包含的数据,对类状态的一种描述;

方法:类或对象的特征或行为

作用:

给类中的字段进行初始化,可以用来创建对象。

特点:

方法名与类名相同

不用定义返回值类型

不需要写return语句

注意

默认构造方法的特点。

多个构造方法是以重载的形式存在的。

构造方法的重载:(需要哪个就去适配哪个,调用哪个)

this([实参]);调用当前类的构造方法

注意: this([实参]);必须放在构造器的第一行;

对象的产生格式

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

因为有(),所以是方法,实际上它就是构造方法,并且是非私有的构造方法。

如:

CellPhone cp = new CellPhone();
Eg:
 
class Person{
 
   private String name;
 
   private int age;
 
   private int sal;
 
   public void show(){
 
      System.out.println("个人情况:"+name+age+sal);
 
   }
 
 
 
   public Person(String name) {
 
      super();
 
      this.name = name;
 
   }
 
 
 
   public Person(String name, int age) {
 
      super();
 
      this.name = name;
 
      this.age = age;
 
   }
 
 
 
   public Person(String name, int age, int sal) {
 
      super();
 
      this.name = name;
 
      this.age = age;
 
      this.sal = sal;
 
   }
 
}

4、static关键字

特点:

随着类的加载而加载

优先于对象存在

被所有对象所共享

可以直接被类名调用

使用注意

静态方法只能访问静态成员

但是非静态成员方法可以访问静态成员;

静态方法中不可以使用this,super关键字

主方法(main)是静态的(可以利用类名去调用静态的main方法,很正常!但是会陷入死循环,导致内存溢出,jvm自动停止!)

public static void main(String[] agrs){}


可修饰字段,方法。

用static 修饰的成员表示它属于这个类共有,而不是属于该类的单个实例。

                static 修饰的字段 == 类字段

                static 修饰的方法 == 类方法

没使用static修饰的字段和方法,成员属于类的单个实例,不属于类。

                没有static 修饰的字段 == 实例字段

                没有static 修饰的方法 == 实例方法


类和实例访问字段和方法的语法:

访问类成员:        类.字段     类.方法

访问实例成员:    实例.字段          实例.方法

我的总结

static 修饰的字段和方法,既可以通过类调用,也可以使用实例调用;

没static 修饰的字段和方法,只能使用实例来调用(建议使用:类名来调用;        其实在底层,对象调用类成员,也会转换类名调用)

static关键字不能与this,super同时连用!


5、匿名对象

一个没有名字的对象,  创建了一个对象出来,没有赋给一个变量;


特点:

对方法或字段只进行一次调用时;

可作为实际参数进行传递;

只在堆里面开辟存储区域,

只能使用一次,  使用完就被销毁了;

何时使用?只拿来用一次!!

new Person();表示匿名对象,没有名字的对象

new Person().age = 17;//使用一次之后就被销毁了

6、this关键字

特点:this表示当前对象。

当前对象  ←→  当前正在调用实例成员的对象

换言之:谁调用了方法,谁就是当前对象。

什么时候使用this关键字呢?

方法间的相互调用;

this.字段;

构造器中相互调用,但是此时this([参数])必须写在构造方法第一行。

this不能用在static修饰的方法里和static修饰的代码块里;

Eg:构造方法中的this.name = name;

7、面向对象之封装

封装的两个含义:

1.把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类);

2."信息隐藏", 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段;

封装机制在程序中的体现是:

把描述对象的状态用字段表示,描述对象的行为用方法表示,把字段和方法定义在一个类中,并保证外界不能任意更改其内部的字段值,也不允许任意调动其内部的功能方法。

程序中的一种体现:

通常将类中的成员变量私有化(private),通过对外提供方法(setXxx,getXxx),可对该变量(xxx)进行访问。

boolean 类型的变量没有getXX,只有 isXX;

 
Eg:
 
class Person1{
 
   private String name;
 
   private int age;
 
   private int sal;
 
  
 
   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;
 
   }
 
}

8、访问修饰符

private 类访问权限:本类内部可以访问,不能继承到子类;

default 什么都不写,包访问权限:本类内部可以访问,同包其他类也可以访问,同包可继承;

protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类;

public 公共访问权限:任何地方都可以访问,能继承到子类;

总结:

20180902114215586.png

9、类的设计分析

分析思路:

根据要求写出类所包含的字段;

所有的字段都必须私有化;

封装之后的字段可通过setter和getter设值和取得;

按需求可添加若干构造方法;

根据需求可添加相应的方法;

类中的所有方法都不要直接处理(输出打印),而是交给调用者去处理。

10、面向对象之继承 

首先有反映一般事物特性的类,然后在此基础上反映出特殊事物的类;

也就是说:继承是一种从一般到特殊的关系;

特点

1、提高了代码的复用性。

2、让类与类之间产生关系,有了这个继承关系才有了多态的特性。

3、Java语言中只支持单继承(有别于C语言)。

因为多继承容易带来安全隐患(父类多了, 功能相同的话,就会出现调用不确定性吗,覆写一个方法,到底覆写的谁的?)。

ps:接口可以实现多继承

4、Java支持多层继承,object是每个类的超类,实现树形结构。

我的总结:

继承是多态的前提。

对类而言,只支持单继承。

格式:

        [修饰符] class SubClass extends SuperClass

按照这种关系,我们把SuperClass类称为父类或基类,把SubClass称为子类或派生类或拓展类;

我的总结:

java.lang.Object是所有类的父类,

        Object要么是直接父类要么是间接父类。

Eg:

学生属于人的一种特殊情况,此时我把人的共性写在Person类里面,为了让学生拥有这些共性(别的比如老师也可以有这些共性),然后我就让学生来拓展Person类。

我的总结:

子类与父类的关系:

子类拓展父类(子类是父类的一种特殊情况)

主要是以父类为基础,然后添加属于自己的字段和方法。

父类的私有成员子类不能继承到;

父类的构造方法不能被继承;

Java只支持单继承,不支持多继承;//不然的话,比如show方法,继承了多个,不知道到底调用那一个。

一个类有且只有一个直接父类;

一个类没显示的继承其他的一个类的时候,默认的直接父类就是Object类;

Student 的直接父类是Person,Object类也是Student类的父类,但是是间接父类;

一旦一个类显示的继承了其他的一个类的时候,此时默认的直接父类Object就会被取消;

Java里一个类只能有一个直接父类;

java.lang.Object是所有类的父类,Object要么是直接父类要么是间接父类。

子类对象实例化过程

在继承操作中,对于子类对象的实例化:

子类对象在实例化之前必须首先调用父类中的构造方法之后再调用自身的构造方法。

以上是本片文章的部分内容,后续会继续为大家整理面向对象知识。不对的地方请指出,谢谢!

更多相关问题请访问PHP中文网:JAVA视频教程

以上是java——面向对象详细介绍(一)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:CSDN。如有侵权,请联系admin@php.cn删除
Java开发的哪些方面取决于平台?Java开发的哪些方面取决于平台?Apr 26, 2025 am 12:19 AM

JavadevelovermentIrelyPlatForm-DeTueTososeVeralFactors.1)JVMVariationsAffectPerformanceNandBehaviorAcroSsdifferentos.2)Nativelibrariesviajnijniiniininiinniinindrododerplatefform.3)

在不同平台上运行Java代码时是否存在性能差异?为什么?在不同平台上运行Java代码时是否存在性能差异?为什么?Apr 26, 2025 am 12:15 AM

Java代码在不同平台上运行时会有性能差异。1)JVM的实现和优化策略不同,如OracleJDK和OpenJDK。2)操作系统的特性,如内存管理和线程调度,也会影响性能。3)可以通过选择合适的JVM、调整JVM参数和代码优化来提升性能。

Java平台独立性有什么局限性?Java平台独立性有什么局限性?Apr 26, 2025 am 12:10 AM

Java'splatFormentenceHaslimitations不包括PerformanceOverhead,versionCompatibilityIsissues,挑战WithnativelibraryIntegration,Platform-SpecificFeatures,andjvminstallation/jvminstallation/jvmintenance/jeartenance.therefactorscomplicatorscomplicatethe“ writeOnce”

解释平台独立性和跨平台发展之间的差异。解释平台独立性和跨平台发展之间的差异。Apr 26, 2025 am 12:08 AM

PlatformIndependendecealLowsProgramStormonanyPlograwsStormanyPlatFormWithOutModification,而LileCross-PlatFormDevelopmentRequiredquiresMomePlatform-specificAdjustments.platFormIndependence,EneblesuniveByjava,EnablesuniversUniversAleversalexecutionbutmayCotutionButMayComproMisePerformance.cross.cross.cross-platformd

即时(JIT)汇编如何影响Java的性能和平台独立性?即时(JIT)汇编如何影响Java的性能和平台独立性?Apr 26, 2025 am 12:02 AM

JITcompilationinJavaenhancesperformancewhilemaintainingplatformindependence.1)Itdynamicallytranslatesbytecodeintonativemachinecodeatruntime,optimizingfrequentlyusedcode.2)TheJVMremainsplatform-independent,allowingthesameJavaapplicationtorunondifferen

为什么Java是开发跨平台桌面应用程序的流行选择?为什么Java是开发跨平台桌面应用程序的流行选择?Apr 25, 2025 am 12:23 AM

javaispopularforcross-platformdesktopapplicationsduetoits“ writeonce,runanywhere”哲学。1)itusesbytbytybytecebytecodethatrunsonanyjvm-platform.2)librarieslikeslikeslikeswingingandjavafxhelpcreatenative-lookingenative-lookinguisis.3)

讨论可能需要在Java中编写平台特定代码的情况。讨论可能需要在Java中编写平台特定代码的情况。Apr 25, 2025 am 12:22 AM

在Java中编写平台特定代码的原因包括访问特定操作系统功能、与特定硬件交互和优化性能。1)使用JNA或JNI访问Windows注册表;2)通过JNI与Linux特定硬件驱动程序交互;3)通过JNI使用Metal优化macOS上的游戏性能。尽管如此,编写平台特定代码会影响代码的可移植性、增加复杂性、可能带来性能开销和安全风险。

与平台独立性相关的Java开发的未来趋势是什么?与平台独立性相关的Java开发的未来趋势是什么?Apr 25, 2025 am 12:12 AM

Java将通过云原生应用、多平台部署和跨语言互操作进一步提升平台独立性。1)云原生应用将使用GraalVM和Quarkus提升启动速度。2)Java将扩展到嵌入式设备、移动设备和量子计算机。3)通过GraalVM,Java将与Python、JavaScript等语言无缝集成,增强跨语言互操作性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具