Java学习之面向对象

Java学习之面向对象,第1张

Java学习之面向对象 面向对象 1 面向过程&面向对象

面向过程:

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

面向对象的三个特性:

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

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

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

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

    非静态方法需要实例化一个对象,在通过 对象.方法名调用

    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:父类的构造方法

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

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

案例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);

    }

}

这里默认执行了父类的构造器和子类的构造器,运行结果如下:

方法的重写(这个也很重要)
重写:需要有继承关系,子类继承父类的方法。

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

为什么要重写?

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

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

多态的存在条件:

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

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

** 多态注意的事项**

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

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

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

** 强制转换**

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

Static关键字详解

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

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

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

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

接口的作用:

是一种约束定义一些方法,让不同的人实现定义的方法一定是public static修饰常量都是final public static接口不能实例化,因为接口中没有构造方法。接口可以使用implements实现多个接口。必须重写接口中的方法。
n种内部类

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713106.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存