Java学习之面向对象

面向对象

1 面向过程&面向对象

面向过程:

  • 步骤清晰,第一步做什么,第二步做什么。
  • 面向过程适合处理一些比较简单的问题
    面向过对象:
  • 物以类聚,人以群分,分类的思维模式,首先思考解决问题需要哪些分类,然后对这写分类进行单独思考,然后对某个分类下的细节进行面向过程的思索。
  • 面向对象适合处理复杂的问题,处理多人协作的问题
    总之,对于复杂的事物,我们需要从整体上合理分析,需要我们用面向对象的思维分析整个系统,但是,具体到微观,仍然需要面向过程的思维去处理。

2 什么是面向对象

面向对象的三个特性:

  • 封装
    面向对象的本质就是:**以类的方式组织代码,以对象的方式封装属性。

  • 继承
    继承是面向对象的一个重要特征,它允许在已有类的基础上创建新类,新类不但要从既有类中继承类的成员,而且可以重新定义或者添加新成员。被继承的类为基类或者父类。

  • 多态
    多态就是同一种事物的多种形态。

    从认识的角度看,是现有对象后由类,类是抽象的,对象是具体的事物,是对对象的抽象。
    从代码的运行角度看,是先有类,后有对象,类是对象的模板。
    方法的知识补充:

  1. 非静态方法需要实例化一个对象,在通过 对象.方法名调用
    在这里插入图片描述
    2.静态方法的调用
    在这里插入图片描述
    **需要说明的时静态方法时和类一起加载的,而非静态方法是实例化之后才存在的。

3 构造器(构造方法)

一个类即使什么也不写,它也会存在一个方法。
类中的构造器也叫构造方法,是在进行创建对象的时候必须调用的,并且构造器由以下两个特点

  • 必须和类的名字相同
  • 必须没有返回类型也不能写void.
    构造器的作用
    1、 使用New关键字的时候,必须要有构造器,new的本质就是调用构造器,我们一旦定义了有参数构造,无参构造就必须显示定义(即必须有一个和类名相同的无参的方法,如果定义了有参构造方法,删除了无参构造方法,就会报错。)
    2、构造器可以用来初始化值。
    注意点
    如果想要使用有参构造方法,就必须 显示的定义一个无参构造方法。
    在这里插入图片描述
    此外,我们需要知道的是代码的执行过程,当main函数new一个对象后,代码是需要先执行构造器,即先执行构造方法,然后再执行new对象代码行以下的代码;我们可以设置断点,来查看执行步骤,步骤如下:
    在这里插入图片描述
    在这里插入图片描述
    这样就可以知道代码的执行过程。

快捷键生成有参/无参构造函数
Alt+insert
快捷键生成无参无参构造,选中多个参数也可以生成多参数的构造方法步骤如下:
在这里插入图片描述
在这里插入图片描述

4 面向对象的三大特性

1. 封装

我们程序设计追求 "**高内聚,低耦合**",高内聚就是类的内部数据操作细节自己完成,不允许外部干涉,低耦合就是仅仅暴露少量的方法给外部使用。
封装:(数据的隐藏)通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息的隐藏。
记住这句话就可以了  :属性私有,get/set;

封装可以使用,再类中验证数据的合法性;

封装的意义

  • 提高程序的安全性,保护数据。
  • 隐藏代码的实现细节。
  • 统一接口。
  • 系统维护性增加了。
    可以使用Alt+insert快捷键生成get和set 方法步骤如下:

在这里插入图片描述
在这里插入图片描述

2. 继承

  • 继承的本质是对某一批类的抽象,从而对实现对现实世界更好的建模,
  • extends 意思是扩展,子类是父类的扩展。
  • Java中只有单继承,没有多继承。(一个儿子只能有一个爸爸,但是一个爸爸可以有多个儿子)
  • 继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖,组合,聚合等。
  • 继承关系的两个类go,子类(派生类),父类(基类),子类继承父类使用extends来表示,,子类和父类之间的关系从意义上讲应该有“is "的关系

子类继承了父类,就会拥有父类的全部方法,前提是用public修饰,如果是private修饰,子类就无法继承。
快捷键Ctrl+H可以查看继承树;
再java中所有的类都默认直接或者间接的继承Object类

super注意点:

  • super调用构造父类的构造方法,必须在构造方法的第一个!
  • super必须只能出现在子类的方法或者构造方法中
  • super和this不能同时调用构造方法,
    super vs this
    代表对象不同
  • this:调用的本类的对象
  • super:调用的是父类的对象
    前提:
  • this 没有继承也可以使用
  • super 必须是在继承的条件下才能使用
    构造方法
  • this:调用的本类的构造方法
  • super:父类的构造方法

关于父类构造器执行(这个很重要)

  1. 当main()函数new一个对象之后,首先默认调用了父类的无参构造,然后调用了本类的无参构造。
  2. 如果要调用父类的无参构造方法,调用的代码必须放在第一行,即要先些执行父类的无参构造,然后才能执行本类的无参构造,否则会报错
  3. 使用thisd调用本类的构造器时,也必须时方法第一行,也就是说 super和this不能同时调用构造方法,最多只能调用一个。
  4. 如果对父类的无参构造方法重载了,变成了有参构造方法(那默认无参构造方法就没有了),那子类只能调用有参构造,而且子类无法调用本类的无参构造方法,解决办法就是在父类加上无参构造方法。

案例5-1
Person类的代码

package com.oop.Dem05;

public class Person {

    //无参构造方法
    public Person(){
        System.out.println("我是Person的无参构造方法");
    }


}

Student类的代码

package com.oop.Dem05;

public class Student extends Person{
    public Student(){
        System.out.println("我是student的无参构造方法");
    }
}

main函数

package com.oop.Dem05;

public class Application {
    public static void main(String[] args) {
        Student student=new Student();//new一个对象
        //student.say();
        //System.out.println(student.money);

    }

}

这里默认执行了父类的构造器和子类的构造器,运行结果如下:
在这里插入图片描述
方法的重写(这个也很重要)
重写:需要有继承关系,子类继承父类的方法。

  1. 方法名必须相同
  2. 参数列表必须相同 (这里要区分重载:重载时参数列表不同)
  3. 修饰符:范围可以扩大但不能缩小:public>prodect>default>private
  4. 抛出的异常:范围可以被缩小,但不能变大;ClassNotFoundException(小)---->Expception(大)
    重写就是子类和父类的方法名一样,方法体不同;

为什么要重写?

  • 父类的功能,子类不一定需要,或者不一定满足!
    快捷键:Alt+insert Override

3. 多态

即是同一方法可以根据发送对象的不同而采用多种不同的行为方式,一个对象的实际类型是确定的,但可以指向对象的引用类型有很多

多态的存在条件:

  • 有继承关系
  • 子类重写父类方法
  • 父类引用子类对象

instanceof关键字和类型转换的关系
instanceof关键字可以用来 判断一个对象是什么类型;可以判断两个类之间的是否存在父子关系;

** 多态注意的事项**

  • 多态是方法的多态,属性没有多态性。
  • 父类和子类要有联系,存在父子关系,否则会有类型转换异常:ClassCastException!
  • 存在条件;需要有继承关系;方法需要重写,父类引用指向子类对象

知识回顾:哪些方法不能被重写?

  • static 方法 属性类的, 不属于实例。
  • final 修饰的 常量;
  • private方法

** 强制转换**

  1. 父类引用指向子类
  2. 把子类转换为父类,向上转型。
  3. 把父类转换为子类,向下转换,强制转化。
  4. 方便方法调用,减少重复代码、

Static关键字详解

抽象方法和抽象类
abstruct 可以用来修饰抽象类,也可以用来修饰方法,

  • 抽象方法只有名字,没有方法的实现
  • 不能new这个抽象类,只能靠子类来继承 。(是一个约束)
  • 子类继承抽象类,那就必须实现抽象类中没有实现的抽象方法,否则该子类也要声明为抽象类。
  • 如果方法中有抽象方法,就必须声明为抽象类,即抽象方法必须抽象类中。抽象类里可以写普通方法。

接口
普通类:只有具体的实现
抽象类:具体实现和规范(抽象方法)都有
接口:只有规范!无法写自己的方法,主页的约束,约束和实现分离,面向接口编程。

接口就是规范:定义一组规则,实现了显示中的思想,接口的本质是契约,就像人间的法律一样,指定号一号就必须遵守。面向对象的精髓,就是对对象抽象,最能体现这一点的就是就是接口。关键字是interface

接口的作用:

  • 是一种约束
  • 定义一些方法,让不同的人实现
  • 定义的方法一定是public static修饰
  • 常量都是final public static
  • 接口不能实例化,因为接口中没有构造方法。
  • 接口可以使用implements实现多个接口。
  • 必须重写接口中的方法。
    n种内部类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值