面向对象复习(1)

本文探讨了Java中的面向对象特性,包括引用类型的转换,编译期与运行期类型的区别,`instanceof`关键字的应用,以及`final`和`static`关键字的详细解释。重点讲解了如何进行子类到父类的转换,`instanceof`用于判断对象类型,以及`final`和`static`修饰符在变量、方法和类上的作用。
摘要由CSDN通过智能技术生成

Day1

引用类型间的数据类型转换

1.两个不相干的类型无法转换
2.子类转父类
Java允许把一个子类对象直接赋值给一个父类引用变量,无需任何类型转换,或者被称为向上转型,由系统自动完成
3.父类保存的对象转子类(强转)

编译期类型与运行期类型

Java的许多对象运行时会出现两种类型:编译期类型和运行期类型
在这里插入图片描述
例:Animal animal = new cat();
编译期类型Animal,运行期类型cat
总结:
编译期类型由声明该变量时使用的类型决定
运行时类型由实际赋给该变量的对象决定
注:如果编译期类型和运行期类型不一致,就会出现所谓的多态
引用变量在编译阶段只能调用其编译时类型所具有的方法,运行时则执行运行期类型的所有方法,因此,引用变量只能调用声明变量类里所包含的方法

instanceof关键字(运算符)

判断的是运行期类型

例题:
定义一个学生类,使得内容支持比较
Student{stuNo.stuName,stuSex}
如果两个对象内的字段内容完全相同则视为同一个

.equals

class Student {
    private String stuName;
    private String stuNo;
    private String stuSex;

    public Student(String stuName, String stuNo, String stuSex) {
        this.stuName = stuName;
        this.stuNo = stuNo;
        this.stuSex = stuSex;
    }

}
public class Test {
    public static void main(String[] args) {
        Student student = new Student("小王","001","男");
        Student student1 = new Student("小王","001","男");
        System.out.println(student.equals(student1));
    }
}

结果
在这里插入图片描述
在这里插入图片描述
.equals比较的是两个堆中的地址,故结果为false
修改

import java.util.Objects;

class Student {
    private String stuName;
    private String stuNo;
    private String stuSex;

    public Student(String stuName, String stuNo, String stuSex) {
        this.stuName = stuName;
        this.stuNo = stuNo;
        this.stuSex = stuSex;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) //判断是否是同一个地址
            return true;
        if (!(o instanceof Student)) //判断Object所保存的数据运行期类型是否是Student
            return false;
        Student student = (Student) o;
        return Objects.equals(stuName, student.stuName) &&
                Objects.equals(stuNo, student.stuNo) &&
                Objects.equals(stuSex, student.stuSex);
    }

}

结果
在这里插入图片描述

instanceof的作用

【对象】instanceof 【类型】
a instance B:判断a是否是b的对象(b子类的对象)
示例

package com.vaporware.demo;
class A
{

}
class B extends A
{

}
class C{

}
public class Test1 {
    public static void main(String[] args) {
        Object o = new B();
        System.out.println(o instanceof A);
        System.out.println(o instanceof B);
        System.out.println(o instanceof C);
    }
}

结果
在这里插入图片描述

final关键字

final:不可改变的
修饰变量:通常变量的第一次赋值称为初始化,被final修饰后则代表不可被改变
修饰方法:则该方法不可被重写
修饰方法的参数:一旦传入参数,方法体内,无法对参数进行二次修改
修饰类:不可被继承,又叫太监类

static关键字

class Person {
    public String name;
    public static String age;

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

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +"age='" + age+
        '}';
    }
}
public class TestPerson {
    public static void main(String[] args) {
       Person person1 = new Person("小王","100");
       Person person2 = new Person("小张","100");
       Person person3 = new Person("小李","100");
       person1.age="20";
        System.out.println(person1);
        System.out.println(person2);
        System.out.println(person3);
    }
}


结果
在这里插入图片描述
在这里插入图片描述
易知,当其中被static修饰的age发生改变时,其他的也会一起改变(被static修饰的变量属于这个类)
静态方法可以拿类调用,不可引用非静态内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值