IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JavaSE学习笔记(四)——面向对象(OOP) -> 正文阅读

[Java知识库]JavaSE学习笔记(四)——面向对象(OOP)

?

目录

?1.初识面向对象

2.对象的创建分析

? ? ? ? 对象创建

????????构造器(构造方法)

? ? ? ? ?内存分析

3.面向对象三大特征

? ? ? ? —封装(数据的隐藏)

? ? ? ? —继承

? ? ? ? —多态

4.抽象类

5.接口?

? ? ? ? 接口与类和抽象类的区别


?

?1.初识面向对象

? ? ? ? 面向过程与面向对象的关系——对于描述复杂的事务,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的的思维来分析整个系统。但是,具体到微观操作,仍然需要使用面向过程的思路去实现。

? ? ? ? 面向对象编程的本质:以类的方式组织代码,以对象的形式封装数据。

????????面向对象三大特征:封装、继承和多态

2.对象的创建分析

? ? ? ? 对象创建

????????类是抽象的、是对象的模板;而对象则是一个具体的事物。类实例化后会返回一个自己的对象,即对象就是类的具体实例

? ? ? ? 下面这个例子中,xiaoming这个对象就是Student学生类的具体实例!

//学生类
public class Student {

    //属性:字段
    String name;
    int age;

    //方法
    public  void  study()
    {
        System.out.println(this.name + "在学习");
    }
}

public class Demo04 {
    public static void main(String[] args) {
        Student xiaoming = new Student();

        xiaoming.name="小明";
        xiaoming.age=18;

        System.out.println(xiaoming.name);
        System.out.println(xiaoming.age);

        xiaoming.study();
    }
}

? ? ? ?

????????构造器(构造方法)

? ? ? ? ? ? ? ? 特点:定义时和类名相同且没有返回值。

? ? ? ? ? ? ? ? 作用:1.使用new关键字,本质是在调用构造方法

? ? ? ? ? ? ? ? ? ? ? ? ? ?2.初始化对象的值

? ? ? ? ? ? ? ? 注意点:一旦定义了有参构造,那么无参构造就必须显示定义

public class Person {
    //一个类即使什么都不写,也会存在一个默认的构造方法
    String name;


    //1.使用new关键字,本质是在调用构造器
    //2.初始化值

    //无参构造,默认存在
    public Person(){}

    //有参构造:一旦定义了有参构造,那么无参构造就必须显示定义
    public Person(String name)
    {
        this.name=name;
    }
}

public class Demo05 {
    public static void main(String[] args) {
        Person person =new Person();
        person.name="xiaoming";

        Person xiaolin = new Person("xiaolin");

        System.out.println(person.name);
        System.out.println(xiaolin.name);
    }
}

? ? ? ? ?内存分析

????????????????

? ? ? ? 首先,程序加载Demo06这个类,将这个类存入方法区里的一个内存空间,并将类里的main()方法也存入其中、常量(旺财和大咪)?存入常量池中,再是执行main()方法,先是new了Pet类的dog对象,这就要在方法区开辟Pet类的空间了,而dog这个引用变量名会在栈中存放,引用地址指向堆中对象的内存空间,然后就是从Demo06类中取出数据为对象的属性赋值,而方法是从Pet类中获得的;后面new的cat对象也是同样的道理~

? ? ? ? ?还有一点,构造器是在类实例化之后才存在的,而static是和类一起加载的,所以在类的外部可以通过类名直接去调用static修饰的属性和方法,在类的内部也是可以直接通过方法名或属性名来调用的。

public class Pet {
    String name;
    int age;

    //无参构造
    public  void shout()
    {
        System.out.println("叫了一声");
    }
}

public class Demo06 {
    public static void main(String[] args) {
        Pet dog = new Pet();
        dog.name="旺财";
        dog.age=3;

        System.out.println(dog.name);
        System.out.println(dog.age);
        dog.shout();

        Pet cat = new Pet();
        cat.name="大咪";
        cat.age=2;

        System.out.println(cat.name);
        System.out.println(cat.age);
        cat.shout();

    }
}

3.面向对象三大特征

? ? ? ? —封装(数据的隐藏)

? ? ? ? ? ? ? ? 该漏的漏,该藏的藏,追求“高内聚,低耦合”——高内聚:类的内部数据由自己操作完成,不允许外部的干涉;低耦合:仅暴露少量的方法给外部使用。

? ? ? ? ? ? ? ? 封装的方法:属性私有,get/set就是属性设置为私有,用private修饰,在外部通过get和set方法来获取和设置类的属性。

? ? ? ? ? ? ? ? 封装的意义:1.提高程序的安全性,保护数据

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.隐藏代码实现的细节

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.统一接口,方法都用get/set

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4.提高系统的可维护性

????????????????

? ? ? ? —继承

? ? ? ? ? ? ? ? 继承的本质是对一批类的抽象,从而实现对现实世界更好的建模。

? ? ? ? ? ? ? ?有继承关系的两个类,一个为子类(派生类),一个为父类(基类),子类继承父类用extends来表示。子类和父类之间,从意义上讲应该具有“is a”的关系,就好比父类为Person,子类为Student,那么就有Student is a Person 。一旦子类继承了父类,那么子类就会拥有父类的所有方法,但属性一般是不会继承的,因为封装的思想,所以属性一般都是由private修饰的,不会被子类所拥有了。

? ? ? ? ? ? ? ? 在Java中,类只有单继承,没有多继承,并且所有的类,都默认直接或间接继承obje类

????????????????

? ? ? ? ? ? ? ??使用super的注意事项:

? ? ? ? ? ? ? ? ????????子类调用父类的构造方法,super()必须出现在子类构造方法的第一行

? ? ? ? ? ? ? ? ????????super必须只能出现在子类的构造方法或方法中

? ? ? ? ? ? ? ? ????????在子类的构造方法中,不能同时出现super()和this(),二者只能唯一?

????????????????this 与 super 的区别

? ? ? ? ? ? ? ? ????????①代表对象不同:this指自身调用者的对象,super指父类的对象

? ? ? ? ? ? ? ? ????????②前提条件不同:this在类没有继承的情况下也可以使用,而super只有在继承的条件下才可以使用

? ? ? ? ? ? ? ? ????????③代表的构造方法不同:this()指本类的构造,super()指父类的构造

? ? ? ? ? ? ? ? 方法重写

? ? ? ? ? ? ? ? ? ? ? ??方法重写需要有继承关系,子类重写父类的方法。

????????????????????????tatic, final, private 关键词修饰的方法不能重写

????????????????????????注意点:1.方法名必须相同

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.方法的参数列表必须相同

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.重写时修饰符的范围可以扩大但不能缩小

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4.抛出的异常范围可以缩小但不能扩大

??

? ? ? ? —多态

? ? ? ? ? ? ? ???概念:同一方法可以根据发送对象的不同而采用多种不同的行为方式

? ? ? ? ? ? ? ? 一个对象的的实际类型是确定的,但可以指向的对象的引用类型有很多,如父类,有关系的类。例子:Student类继承了Person类,那么,Student a = new Student();? Person b = new Student();? object c = new Student()都是可以的 。

????????????????

? ? ? ? ? ? ? ? 多态的注意事项:

? ? ? ? ? ? ? ? ??????多态是方法的多态,属性没有多态?

? ? ? ? ? ? ? ????????子类和父类要有联系?

? ? ? ? ? ? ? ? ??????存在的条件:要有继承关系子类需要重写父类方法父类的引用指向子类对象?

? ? ? ? ? ? ? ?

????????????????引用类型转换

? ? ? ? ? ? ? ? ????????instanceof 关键字,可以判断一个对象的类型,X instanceof Y 编译是否成功要看 X指向的实际类型是否为Y的子类型 ,即X 和 Y 是否存在联系。

public class Demo08 {
    //Object > String
    //Object > Person > Teacher
    //Object > Person > Student
    public static void main(String[] args) {
        //X instanceof Y  X指向的实际类型是否为Y的子类型 编译是否成功
        Object object = new Student();

        System.out.println(object instanceof Student);//true
        System.out.println(object instanceof Person);//true
        System.out.println(object instanceof Object);//true
        System.out.println(object instanceof Teacher);//false
        System.out.println(object instanceof String);//false

        Person person = new Student();
        System.out.println(person instanceof Student);//true
        System.out.println(person  instanceof Person);//true
        System.out.println(person instanceof Object);//true
        System.out.println(person  instanceof Teacher);//false
        //System.out.println(person  instanceof String);//编译报错

        Student student = new Student();
        System.out.println(student instanceof Student);//true
        System.out.println(student instanceof Person);//true
        System.out.println(student instanceof Object);//true
        //System.out.println(student instanceof Teacher);//编译报错
        //System.out.println(student instanceof String);//编译报错
     }
}

? ? ? ? ? ? ? ? ? ? ? ? 引用类型转换,是父类和子类之间的转换,遵循低转高不用强转,而高转低则需要进行强制转换的原则,但当子类转为父类时,可能会丢失子类本来的一些方法。

? ? ?

4.抽象类

? ? ? ? 用abstract?关键字可以修饰类和方法,对应的就是抽象类和抽象方法。

? ? ? ? 抽象类:不能使用new 关键字来创建对象,是用来让子类继承的。?

? ? ? ? 抽象方法:?只有方法的声明,没有方法的实现是用来让子类实现的。

????????抽象类中可以没有抽象方法,而有抽象方法的类一定要声明为抽象类;子类继承抽象类,就必须实现抽象类中没有实现的抽象方法,否则该子类也要声明为抽象类

5.接口?

? ? ? ? 接口的本质是契约,就像法律法规一样,需要去遵守的。

? ? ? ? 接口与类和抽象类的区别

????????????普通类:只有具体实现

? ? ? ? ? ??抽象类:具体实现和规范(抽象方法)都有

? ? ? ? ? ??接口:只有规范,专业的约束,实现约束和实现分离

? ? ? ? 接口用 interface 关键词来修饰,可以通过implements 来实现多个接口,所以接口可以实现多继承,但因为接口中没有构造方法,所以接口无法实现实例化

?

????????????????

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 10:55:44  更:2021-12-10 10:58:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:27:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码