Java的面向对象和抽象类、接口、内部类以及OOP实战

Java的面向对象和抽象类、接口、内部类以及OOP实战初识面向对象面向过程&面向对象什么是面向对象面向对象三大特征封装封装的作用继承方法重写多态instanceof和类型转换方法回顾和加深方法的定义方法的调用对象的创建分析类与对象的关系创建与初始化对象内存分析类与对象小结Static关键字详解静态变量和静态方法static代码块和匿名代码块静态导入包抽象类和接口抽象类接口内部类初识面向对象面向过程&面向对象面向过程思想步骤清晰简单,第一步做什么,第二步做什么…面向过程适合处理一些
摘要由CSDN通过智能技术生成

初识面向对象

面向过程&面向对象

面向过程思想

  • 步骤清晰简单,第一步做什么,第二步做什么…
  • 面向过程适合处理一些较为简单的问题…

面向对象思想

  • 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
  • 面向对象适合处理复杂的问题,适合处理需要多人协作的问题

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

什么是面向对象

  • 面向对象编程(Object-Oriented Programming,OOP)

  • 面向对象编程的本质是:以类的方式组织代码,以对象的组织(封装)数据

  • 抽象

  • 三大特性:

    • 封装
    • 继承:子类可以继承父类所有东西
    • 多态:同一个事物有多种形态

从认识角度考虑是先有对象后有类。 对象,是具体的事物。类,是抽象的,是对对象的抽象

从代码运行角度考虑是先有类后有对象。 类是对象的模板。

面向对象三大特征

封装

1.该露的露,该藏的藏

  • 我们程序设计要求**“高内聚,低耦合”**。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合就是仅暴露少量的方法给外部使用

2.封装(数据的隐藏)

  • 通常,应禁止直接访问一个对象中数据的世纪标识,而应该通过操作接口来访问,这称为信息隐藏

⭐️属性私有,get/set

Student类

package com.oop.demo04;
//类   private:私有
public class Student {
   
    //属性私有
    private String name;//名字
    private int id;//学号
    private char sex;//性别
    private int age;//年龄

    //提供一些可以操作这个属性的方法
    //提供一些public的get、set的方法

    //get获得这个数据
    public String getName(){
   
        return this.name;
    }
    //set给这个数据设置值
    public void setName(String name){
   
        this.name = name;
    }
    //alt+insert 自动生成get、set方法

    public int getId() {
   
        return id;
    }

    public void setId(int id) {
   
        this.id = id;
    }

    public char getSex() {
   
        return sex;
    }

    public void setSex(char sex) {
   
        this.sex = sex;
    }

    public int getAge() {
   
        return age;
    }

    public void setAge(int age) {
   
        if(age>120 || age<0){
   
            this.age=3;
        }else{
   
            this.age = age;
        }
    }
    /*
    1.提高程序的安全性,保护数据
    2.隐藏代码的实现细节
    3.统一接口
    4.系统可维护性增加了
     */
}

测试类

package com.oop;

import com.oop.demo03.Pet;
import com.oop.demo04.Student;

//一个项目应该只存在一个main方法
public class Application {
   
    public static void main(String[] args) {
   
        Student s1 = new Student();
        s1.setName("沈小榆");
        System.out.println(s1.getName());//沈小榆
        s1.setAge(999);//不合法的 3
        System.out.println(s1.getAge());//3
    }
}
封装的作用
  1. 提高程序的安全性,保护数据
  2. 隐藏代码的实现细节
  3. 统一接口
  4. 系统可维护性增加了

继承

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

extands的意思是“扩展”。子类是父类的扩展

Java中类只有单继承,没有多继承:一个儿子只有一个爸爸,一个爸爸可以有多个儿子

继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等

继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示

子类和父类之间,从意义上讲应该具有“is a”的关系

**object 类:**在java中所有的类,都默认直接或者间接继承Object

super注意点:

  1. 调用父类的构造方法,必须在构造方法的第一个
  2. super必须只能出现在子类的方法或者构造方法中
  3. super和this不能同时调用构造方法

super和this对比

  • 代表的对象不同:

    • this:本身调用着这个对象
    • super:代表父类对象的应用
  • 前提:

    • this:没有继承也可以使用
    • super:只能在继承条件下才可以使用
  • 构造方法的区别:

    • this()调用本类的构造
    • super()调用父类的构造

父类Person类

package com.oop.demo05;
//在java中所有的类,都默认直接或者间接继承Object
//Person 人:父类
public class Person /*extends Object*/{
   
    private int money =10_0000_0000;
    protected String name ="shenxiaoyu";
    public void say(){
   
        System.out.println("Person");
    }
    public int getMoney() {
   
        return money;
    }

    public void setMoney(int money) {
   
        this.money = money;
    }

    public Person() {
   
        System.out.println("Person无参执行了");
    }
}

子类Student类

package com.oop.demo05;
//Student is Person 学生是人
//子类继承了父类就会拥有父类的全部方法,私有的东西无法被继承
public class Student extends Person {
   
    //ctrl+H可以查看继承树
    private String name ="moguyu";
    public void test1(String name){
   
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }
    public void say(){
   
        System.out.println("Student");
    }
    public void test2(){
   
        say();//Student
        this.say();//Student
        super.say();//Person
    }

    public Student() {
   
        //隐藏代码:调用了父类的无参构造
        super();//调用父类的构造器,必须要在子类构造器的第一行
        //this()调用自己的构造器也需要放在代码的第一行
        System.out.println("Student无参执行了");
    }
}

测试类

package com.oop;

import com.oop.demo03.Pet;
import com.oop.demo05.Person;
import com.oop.demo05.Student;

//一个项目应该只存在一个main方法
public class Application {
   
    public static void main(String[] args) {
   
        Student student = new Student();
        /*
        Person无参执行了
        Student无参执行了
         */
        student.say();
        student.test1("沈小榆");
        /*
        沈小榆
        moguyu
        shenxiaoyu
         */
        student.test2();
    }
}
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值