Java之类和对象

这篇具有很好参考价值的文章主要介绍了Java之类和对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、类和对象

C++和Java都是面向对象编程的语言,而C和Go是面向过程编程的语言.

主要概述一下面向对象编程,也就是op.在面向对象的世界中,一切皆对象.解决问题的途径主要是靠对象之间的交互去完成.

类的模板

类就是对一种事物的概述,比如说猫类,狗类,人类等等,在这些类中,有成员变量和成员方法.变量主要是表示这类中性质的定义,方法则是对这类中行为的概述.

class  类名{
     //成员属性

     //成员方法
}

类的实例化-------对象         

有了类之后,就应该去实例化一个类,称之为对象,而对象就是实实在在的存在的事物,因此对象也成为类的实例化.比如名为王三的这个人,就是由人类实例化出来的.例如:

//定义了人类,里面可以有姓名,年龄,性别等等
class Person{
   String name;
   public void getName(String name){
        this.name=name;
   }
}


public class Main{
   public void static void main(String[] args){
        Person person = new Person('王三')//实例化了一个对象
   }
}

在实例化的过程中,使用new去创建一个对象

使用 . 来访问对象中的成员属性和方法

同一个类可以实例化多个对象,毕竟不可能只有人类中只有一个人吧.

成员变量和局部变量

成员变量:类的内部,方法的外部就是成员变量,成员变量有默认值,当然也可以在定义变量时赋值,不过这个看你未来的项目需求,一般没什么用,其生命周期是从对象创建时开始,到对象销毁就结束.

局部变量:方法内部,无默认值,进入方法创建,出方法结束.

构造方法

构造方法是一种特殊的成员方法,对成员中的成员属性进行赋值的方法.

其方法名和类名一致,没有返回值,在上面的人类中的方法就是一个构造方法.

如果类中没有写构造方法,那么会存在一个隐藏的无参构造方法,但是一旦存在一个构造方法,那么将不会存在任何的构造方法.

如果有多个构造方法,那么就构成重载.对于重载,也就是方法名必须相同,参数列表可以不同,返回值不做要求.因此对于构造方法来说,完全符合要求.

this引用

this一般可以不用,但是习惯使用.

对于this来说,如果实例化两个人类,那么调用方法时,如何得知是哪个对象去调用.其实在每一个方法中都含有一个隐藏的this在形参中,这样就可以知道是哪个对象去调用了这个方法.因此,this表示了当前对象的引用,就看谁调用了这个方法,慢慢理解,第一次接触当然不太容易懂了.值得注意的是静态的并不能使用this,这需要到static才可以了解.大家也可以通过标题跳到static中.

一般有三个用处:

第一个就是调用成员变量,this.name

第二个就是调用成员方法,this.getName( )

第三个就是调用构造方法,this(.....),括号中给出的就是值就是给另一个构造方法的值.举个比方,如果给一个无参构造,那么为了使其有一个特定初始值,因此在构造方法中放一个this(某个/些成员属性的值),这样给其一个特定的值,使得代码不至于太过冗杂.

对象的生成

首先为对象分配内存,这时引用就有了,也就是说对于类来说,不管是自定义的,还是Java给出的,都是相同的,这就是引用.当引用完成后,进调用造方法,这时对象就生成了.

二、三大特性之封装

封装定义

将数据和操作数据的方法进行结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互.

对于我自己的理解来说,就是不用去实现,只去使用就可以了,比如说对于一个字符串来说,使用charAt就可以获得某个字符.这就是面向对象编程的好处.

自定义包:其实就是文件夹,将一些类放于其中.

对于import来说,就是导入包,也就是在类中可以使用自定义包或者Java本身的包.

对于package来说,就是表示当前在哪个包中.

是可以包套包的,也就是无限套娃,可以类比于文件夹来说.

访问修饰限定符

1. private:只能在当前类中进行访问

2. 包访问权限(default):对于同一包中,可以访问其成员

3. protected:需要学到继承才可了解,权限又会增大一步,可以访问不同包的子类

4. public:最宽松的访问权限,任何情况下都可以使用

static成员

使用static修饰的称为静态成员(类成员),还有非静态成员(普通成员)

非静态成员/普通成员都需要对象的引用去调用

使用static的成员,不依赖于对象,而是直接跟类相关.置于方法区.直接使用类名就可以访问.

静态成员方法内部不能使用直接使用非静态成员的变量和方法,有因为当main函数中使用某类的静态成员方法时,是不需要实例化对象的,但是普通成员变量需要必须得实例化后才可以,因此在静态成员方法内部不能直接使用非静态成员的变量或者方法,如果要使用,那么就需要new.

对于静态成员变量来说,可以就地初始化,也就是直接赋值,还可以通过代码块进行赋值,也可以通过get和set方法,但此时也应将方法设为静态的,否则没有什么意义.比如说有非静态的成员变量,但要想初始化还需要去实例化一个对象,那么毫无作用,本来就是想通过类名直接访问的.

代码块

1. 普通代码块:有花括号括起来的代码块,定义在方法内部,我觉得没什么作用

public int getAgew(){
    {
        System.out.println("给出此人的年龄");
    }
    return this.age;
}

2. 构造代码块:类内部,方法外部,用来初始化非静态成员.先执行构造代码块,再执行构造方法.可以类比于将此代码块置于构造方法的最前端.如果有多个构造代码块,则看顺序,谁在前面,先执行谁的.

//比如下述结构,最后name被赋值是赵四,而不是王五
//因为先执行王五,再执行赵四

{
      this.name="王五";
}
      public String name="赵四";

3. 静态代码块:最先被执行,并且只被执行一次,并且如果只是静态代码块的话,按顺序执行

只要使用到类,就会被执行,而是是第一次使用到类,第二次使用则不会被执行,只执行一次

//使用static修饰

static{
     name="王五";
     System.out.println("禅师");
}
     public static String name="赵四";

 代码块执行的大致顺序就是

静态代码块 - > 实例代码块(构造代码块块) - > 构造方法

三、三大特性之继承(extends)

基本概念

class Cat extends Animal{


}

上述代码中,子类就是猫类,也称作派生类.

父类就是动物类,也称作基类/超类

意义

就是减少代码的冗杂度,加强代码的复用性.

super的使用

super和this类似,this指代的是当前对象属性,super则是指代父类的属性.

切记:但是super并不是代码父类对象的引用,子类继承和父类,但是使用时只是new了子类对象,而没有new父类对象,因此不可称作父类对象的引用,super只能称作关键词.

super也有三个作用:引用父类成员变量/引用父类成员方法/进行构造方法的调用

值得注意的是,使用this进行构造方法的调用时,需要将其放在第一行,而super进行父类构造方法的调用时,也需要放在第一行,因此两者不能同时使用.并且在子类中进行使用构造方法时,要先将父类的构造方法使用super构造好,不然无法使用.如果父类有无参的构造方法,那么在子类中,super()可不写.

对方法的调用

另外,在进行使用时,一般都是采用就近原则的方法:如果一个方法子类有,那么就调用子类的;子类没有,再去调用父类的.如果子类和父类都有,那么还是调用子类的,如果想要调用父类的,那么就需要用到super来进行调用.

代码块的终极执行顺序

先执行父类的静态代码块   - >   再执行子类的静态代码块   - >   无论是谁的静态代码块,都只能使用一次,没有第二次使用机会   - >   再执行父类的实例化代码块   - >   再执行父类的构造方法   - >   再执行子类的实例化代码块   - >   最后执行子类的构造方法   - >   我认为实例化代码块这个东西,不管有没有花括号,都会进行执行.并且对于同一类代码块,按照定义的先后顺序执行.

继承方式

单继承方式,也就是一个类只能继承另一个类,而不能继承多个,和C++有区别,C++有多种继承方式.

final

和C中的const差不多,表示常量的意思,并且必须赋初值.

例如:有一个数组

final int[] array = new int[]{1,2,3};

这表示引用不能变,但是其中的值还可以变.如何理解这个问题呢?

Java之类和对象

 如图所示,表示的引用也就是0X9,其实是0X9不能变,但是0X9指向的值是可以变的,也就是1,2,3是不受其约束的,可以随意改变值,需要多画图理解.

四、三大特性之多态

基本概念

多态是三大特性之一,更是一种思想.当不同子类去调用父类时,会获得不同的结果.比如猫在叫时就是多喵喵;而狗在叫时就是汪汪叫.

多态的实现条件

向上转型,重写,继承

向上转型

在子类继承父类后,实例化对象时体现的一种性质.如下述代码中猫类继承动物类.

在发生向上转型以后,只能调用父类的成员变量和方法而不能调用子类的成员变量和方法.

Dog cat = new Cat();

向下转型

向下转型是有危险性存在的,可以利用instanceof进行判断

Animal animal = new Cat();
Cat cat = (Cat)animal;

这就是向下转型,当向下转型发生后,子类的方法和属性也可以调用.

重写

重写指的就是在子类中重写父类的方法.

重写中,方法名,参数列表和返回值都必须相同,而访问修饰限定符子类中的必须大于等于子类中的,我们称之为协变类型.

在重写的过程中,private/static/final修饰的都不可以重写

动态绑定

多态的基础就是动态绑定

动态绑定需要向上转型,重写,通过父类引用,调用子类和父类重写的方法

特点:编译时,不能确定方法的行为;当运行时,才能确定

优点:代码更加灵活

缺点:不能调用子类的特有的方法

静态绑定

其实就是重载

优点:编译时已经确定调用的方法

五、抽象类(abstract)

类中没有足够的信息来完成对类的一个描述称之为抽象类.

在抽象类中,可以没有抽象成员方法和抽象成员属性,但是在普通类中绝对不能有抽象属性和方法.

抽象类就是为了被继承,当抽象方法被继承之后,必须重写其中的抽象方法,如果没有将抽象方法都重写完,那么要将子类也定义类抽象类

既然为了被继承,则重写中不能使用的在抽象中也不能被使用

六、接口(interface)

接口就是抽象类的更进一步,不能实例化,只能被接.

在接口中,方法都是默认的public abstract

属性都是public  static  final,因此必须初始化,没有构造方法

但是jdk8开始,可以写default修饰的方法(这是普通方法)

可以有static方法

使用implements来继承接口

虽然类只能继承一个,但是接口确可以多继承.文章来源地址https://www.toymoban.com/news/detail-433628.html

到了这里,关于Java之类和对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】:类和对象(中)之类的默认成员函数——构造函数and析构函数

    如果一个类中什么成员都没有,简称为空类 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数 由于编译器的优化 我们未给_a赋值 这里是不会报

    2024年02月08日
    浏览(51)
  • Go语言面向对象编程

    注:安装教程 上一篇 1.1、简单实例 1.2、指针 1、Go语言中的面向对象最为直观,也无需支付额外的成本。如果要求对象必须以指针传递,这有时会是个额外成本,因为对象有时很小(比如4字节),用指针传递并不划算。 只有在你需要修改对象的时候,才必须用指针。它不是

    2024年02月06日
    浏览(56)
  • 【转载】R语言 面向对象编程

    转载自:R语言教程 面向对象的编程侧重于数据和对象,而不是程序。面向对象的模型有助于我们对现实生活中的对象进行建模。为了在数据科学领域出类拔萃,掌握面向对象的编程概念很重要。每个程序都有特殊类型的类。在本教程中,将重点讨论R语言中的S3和S4类、泛型函

    2024年01月20日
    浏览(117)
  • 【JAVA杂货铺】一文带你走进面向对象编程的构造方法 | Java| 面向对象编程 | (中)

    🌈个人主页:  Aileen_0v0 🔥系列专栏: Java学习系列专栏 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\"   目录 回顾  构造方法  this 面试题 构造方法的类型  下节预告 代码块  之前我们学习了什么是类  什么是对象  什么是面向对象编程 定义类   构造方法 :它的方法名

    2024年02月05日
    浏览(55)
  • Rust编程语言入门之Rust的面向对象编程特性

    Rust 受到多种编程范式的影响,包括面向对象 面向对象通常包含以下特性:命名对象、封装、继承 “设计模式四人帮”在《设计模型》中给面向对象的定义: 面向对象的程序由对象组成 对象包装了数据和操作这些数据的过程,这些过程通常被称作方法或操作 基于此定义:

    2023年04月21日
    浏览(54)
  • 【跟小嘉学 Rust 编程】十七、面向对象语言特性

    【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学 Rust 编程】六、枚举

    2024年02月10日
    浏览(89)
  • JAVA- 面向对象编程(上)

      🌈个人主页:  Aileen_0v0 🔥系列专栏: PYTHON学习系列专栏 💫个人格言:\\\"没有罗马,那就自己创造罗马~\\\" 目录 面向对象的特征及理解  new  Static Summary:   面试题:oop的三大特征是什么?  --- 封装,继承,多态 类,对象是什么? 类是自定义类型, 对象是实体 通俗的讲类相当于建房子的

    2024年02月05日
    浏览(47)
  • Java——面向对象编程思想

    如果有人问你,C和Java的区别是什么呢? 我想大部分人肯定脱口而出的是:C是面向过程的,Java是面向对象的。 那如何理解面向过程和面向对象呢? 首先,面向过程和面向对象都是编程思想。 ①面向过程,以C语言为代表,它是按解决一个问题的的流程或者先后步骤来编程的

    2024年02月11日
    浏览(46)
  • Java面向对象编程·上

    大家好,我是晓星航。今天为大家带来的是面向对象编程相关的讲解!😀 包 (package) 是组织类的一种方式. 使用包的主要目的是保证类的唯一性. 例如, 你在代码中写了一个 Test 类. 然后你的同事也可能写一个 Test 类. 如果出现两个同名的类, 就会冲突, 导致代码不能编译通过

    2023年04月15日
    浏览(48)
  • Java面向对象编程

    A.邮件服务的设置文件 B.DHCP的设置文件 C.DNS解析的设置文件 D.网络路由的设置文件 答案:C A.本机网关设置错误 B.本机没有正确设置DNS C.对方运行的是不同的操作系统 D.二层交换机故障 答案:A A.侵入目标服务器,获取重要数据 B.采用穷举的方式获得登录账号 C.发送无效的请求

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包