re0:从零开始的Java学习生活08(连载)

面向对象、多态

一、Object

是java中所有类的父类

在java中的所有类都会直接或者间接的继承自Object类

1、toString

把对象数据以字符串的形式表示

直接打印一个对象的引用的时候,默认打印的是调用toString()方法的返回值

需求: 在打印一个javabean类型对象的引用的时候,其实是想要了解这个对象的基本信息->成员变量的值

解决: 在子类中重写toString方法,因为打印对象引用时候默认会调用toString(),toString功能需要,实现不满意,就重写

class User{
    String name;
    String password;
    @Override
    public String toString() {
        return "User{" + "name='" + name + '\'' + ", password='" + password + '\'' + '}';
    }
}

2、equals

== 可以比较所有数据类型的数据,基本数据类型->数据值 引用数据类型->比较对象地址

equals 只能比较引用数据类型的数据

比较两个数据是否相等 对象1.equals(对象2)

Object类中equals方法的实现-->默认比较对象的地址,可以通过重写equals方法实现比较对象的内容

需求: 比较两个引用数据类型对象的时候,想要比较两个对象的所有成员变量的值是否都相等,而非比较对象地址

解决: 子类中重写equals方法,实现比较对象内容非地址

class User{
    String name;
    String password;
    @Override
    public boolean equals(Object u){
        if(this==u) return true;
        if(u instanceof User)
            return this.name.equals(((User)u).name)&&this.password.equals(((User)u).password);
        return false;
    }
}

二、多态

多态的最终体现:父类引用指向子类对象

1、多态介绍

前提:

继承关系

实现关系

调用多态方法时,会使用子类的重写方法

(多态与重写一起使用,没有重写多态就没有意义)

多态方法的不同说法:

编译看父类,运行找子类

编译看左边,运行找右边

编译看类型,运行找对象

多态引用对·子类新增内容不可见

多态的好处:

解耦 灵活性

便于后期维护

2、转型

基本数据类型 :

自动类型提升 : 小-->大

int i = 'a';

强制类型转换 : 大-->小

byte b = (byte)i;

转型:

引用数据类型:

父类->大

子类->小

向上转型: 小->大

Person p = new Student();

向下转型: 大->小

Student s = (Student)p;

通过多态的引用调用子类中新增内容的时候,需要向下转型

三、abstract

被abstract修饰的类为抽象类,不可实例化

被abstract修饰的方法为抽象方法,不重写无法使用

1.抽象类中可以存在具体方法,可以存在抽象方法

可以存在成员变量.构造器

2.抽象类不能实例化,(不能创建对象)

3.一个抽象方法必须被重写,重写可以为抽象方法定义方法体

4.抽象类的使用:通过具体子类的对象使用

具体的子类:重写了父类的抽象方法

抽象的子类:没有重写父类的抽象方法

5.一个抽象方法一旦被重写,后续是否需要重写根据需求而定.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值