ch08:面向对象(中级)

主要内容

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

一:IDEA

在这里插入图片描述

在这里插入图片描述

二:包

在这里插入图片描述

1.引出

在这里插入图片描述

2.作用

在这里插入图片描述

3.语法

在这里插入图片描述

4.本质

在这里插入图片描述

5.入门

在这里插入图片描述

  • 第一个使用默认导入的包
		Dog dog1 = new Dog();
        System.out.println(dog1);

        com.xiaoqiang.Dog dog2 = new com.xiaoqiang.Dog();
        System.out.println(dog2);

在这里插入图片描述

命名

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

常用包

在这里插入图片描述

注意

在这里插入图片描述

类进一步完善

在这里插入图片描述

三:访问修饰符

在这里插入图片描述

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

在这里插入图片描述

四:OOP三大特征

1.封装

在这里插入图片描述

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

在这里插入图片描述

  • 案例
    在这里插入图片描述
  • 不能直接查看工资:getXxx()方法中设置给权限密码
//创建一个类
class People{
    public String name;
    private int age;

    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if(name.length() >= 2 && name.length() <= 6){
            this.name = name;
        }else {
            System.out.println("请输入的2-6个字符的名字");
            //给个默认值
            this.name = "无名人";
        }
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age > 1 && age < 120) {
            this.age = age;    
        }else {
            System.out.println("年龄在1-120间");
        }
    }
}
封装与构造器

在这里插入图片描述

  • 将构造器 与 类提供的 访问方法结合,进行数据校验
public People(String name, int age) {
        this.name = name;
        this.age = age;
    }
public People(String name, int age) {
        setName(name);
        setAge(age);
    }
  • 练习
    在这里插入图片描述

2.继承

在这里插入图片描述

在这里插入图片描述

		Pupil pupil = new Pupil();
        pupil.name = "小明";
        pupil.exam();
        pupil.setScore(100);
        pupil.showInfo();

        Graduate graduate = new Graduate();
        graduate.name = "大明";
        graduate.exam();
        graduate.setScore(150);
        graduate.showInfo();

class Student{
    public String name;
    private double score;

    public Student(){
        System.out.println("Student无参被调用。。。。。");
    }

    public void setScore(double score) {
        this.score = score;
    }

    public void showInfo(){
        System.out.println("学生:" + name + "  成绩:" + score);
    }
}

class Pupil extends Student{
    public void exam(){
        System.out.println("小学生:" + name + "在考试");
    }
}

class Graduate extends Student{
    public void exam(){
        System.out.println("大学生:" + name + "在考试");
    }
}

在这里插入图片描述

一:示意图

在这里插入图片描述

二:细节
1.处理父类私有方法

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

  • 换另外一种访问
		child.getVar_private();
        child.return_funp();
  • Father类添加 公共访问方法
	public int getVar_private() {
        return var_private;
    }
    public void return_funp(){
        fun_private();
    }
2.构造器 关系:子类 父类

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

3.父类构造器 显式、默认调用

在这里插入图片描述

4.父类构造器 super()位置

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

5.super() 与 this()

在这里插入图片描述

6.Object 所有类的 超类

在这里插入图片描述

7.继承 追溯 到Object(构造器自顶向下 实现super())

在这里插入图片描述

8.单继承(直接继承)

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

9.什么时候 用继承

在这里插入图片描述

三:本质

在这里插入图片描述

  • 方法一级一级找
  • 构造器:从上往下
    在这里插入图片描述
		Son son = new Son();
        System.out.println(son.name + son.age + son.hobby);
class GrandPa{
    String name = "大头爷爷";
    String hobby = "旅游";

    public GrandPa(){
        System.out.println("GrandPa构造方法");
    }
}

class Father extends GrandPa{
    String name = "大头爸爸";
    int age = 39;

    public Father(){
        System.out.println("Father构造方法");
    }
}

class Son extends Father{
    public Son(){
        System.out.println("son构造方法");
    }
    String name = "大头儿子";
}

在这里插入图片描述

  • 练习
    在这里插入图片描述

五:super

在这里插入图片描述

在这里插入图片描述

  • 注意查找,
    在这里插入图片描述

在这里插入图片描述

六:方法重写/覆盖(overwrite)

在这里插入图片描述

在这里插入图片描述

细节
1.返回类型

在这里插入图片描述

2.访问权限(修饰符)

在这里插入图片描述

重载–重写

在这里插入图片描述

  • 练习(省略get / set方法)
		Person jack = new Person("jack", 10);
        System.out.println(jack.say());

        Student smith = new Student("smith", 20, 123456, 99.8);
        System.out.println(smith.say());

class Person{
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String say(){
        return "name=" + name + " age=" + age;
    }
}

class Student extends Person{
    private int id;
    private double score;

    public Student(String name, int age, int id, double score) {
        super(name, age);
        this.id = id;
        this.score = score;
    }

    public String say(){
        return super.say() + " id= " + id + " score= " + score;
    }
}

  • 复用父类
    在这里插入图片描述
    在这里插入图片描述

  • 完善应该添加一些逻辑
    在这里插入图片描述

七:多态

在这里插入图片描述

1.引出

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

2.方法多态

在这里插入图片描述

3.对象多态
编译运行----运行类型
父类的引用 指向 子类对象

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

  • 入门
    在这里插入图片描述
4.细节
1.向上转型

在这里插入图片描述

2.向下转型

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.属性没有重写

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

4.instanceof 判断运行类型

在这里插入图片描述

  • 练习
    在这里插入图片描述

  • 练习2
    在这里插入图片描述

在这里插入图片描述

5.动态绑定机制

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

6.多态应用(结合动态绑定机制)
多态数组

在这里插入图片描述

多态参数

在这里插入图片描述

八:Object类

在这里插入图片描述

1.==

在这里插入图片描述

2.equals()

在这里插入图片描述

  • Object源码
  • 在这里插入图片描述

在这里插入图片描述

  • 练习
    在这里插入图片描述
  • 注意基本数据类型

在这里插入图片描述

  • 重写Person的equals()方法
 @Override
    public boolean equals(Object obj) {
        if (this == obj){
            return true;
        }
        if (obj instanceof Person){
            Person p = (Person) obj;
            return this.age == p.age && this.gender.equals(p.gender) && this.name.equals(p.name);
        }
        return false;
    }

3.hashCode()

在这里插入图片描述

4.toString
  • 直接输出对象,默认会调用toString()
    在这里插入图片描述
    在这里插入图片描述
5.finalize

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

		Car car = new Car("BMW");
        car = null;

        //主动调用,看效果
        System.gc();
        System.out.println("程序退出。。。");

class Car{
    private String name;

    public Car(String name) {
        this.name = name;
    }

    //销毁对象
    @Override
    protected void finalize() throws Throwable {
//        super.finalize();
        System.out.println("回收了对象");
        System.out.println("释放一些资源。。。。");
    }
}

九:断点调试

在这里插入图片描述

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

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值