Java--包,访问修饰符,多态数组,==和equals,hashcode,toString

news/2024/7/5 1:43:42

                同一个包里面不能有重复的类,不同的包可以有相同的类,包和包之间互不干涉。一个包下面有很多的类。

包的命名规则:

                只能包含数字,字母,下划线,小圆点,但不能用数字开头,不能是关键字或保留字。

包的命名规范:

                com.公司名.项目名.业务模块名

访问修饰符

                Java共有四种访问修饰符,用于控制方法和属性(成员变量)的访问权限(范围):

        1.公开级别:public修饰,对外公开。

        2.受保护级别:protected修饰,对子类和同一个包中的类公开。

        3.默认级别:没有修饰符号,向同一个包的类公开。

        4.私有级别:private修饰,只有类本身可以访问,不对外公开。

 

注意事项:

        只有默认的和public才能修饰类,并且遵循上述访问权限的特点。

属性重写问题:

        1.属性没有重写之说!属性的值看编译类型。

public class demo {
    public static void main(String[] args) {
        //生属性没有重写之说,属性的值看编译类型
        Base base = new Sub();      //向上转型
        System.out.println(base.count);     //10
        Sub sub = new Sub();
        System.out.println(sub.count);      //20
    }
}

class Base{
    int count = 10;
}

class Sub extends Base{
    int count = 20;
}

        2.instanceof 比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型

public class demo01 {
    public static void main(String[] args) {
        BB bb = new BB();
        System.out.println(bb instanceof BB);   //true
        System.out.println(bb instanceof AA);   //true

        //aa是编译类型,BB是运行类型
        AA aa = new BB();
        System.out.println(aa instanceof AA);   //true
        System.out.println(aa instanceof BB);   //true

        Object object = new Object();
        System.out.println(object instanceof AA);   //false

        String str = "hello";
        System.out.println(str instanceof Object);  //true
    }
}

class AA {
}

class BB extends AA {
}

动态绑定机制

                1.当调用对象方法时,该方法会和该对象的运行类型绑定。

                2.当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用。

多态数组

                数组的定义类型是父类类型,里面保存的实际元素类型是子类类型。

案例如下:

public class Persion {

    private String name;
    private int age;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }



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

}


public class Student extends Persion{
    private double score;

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

    public double getScore() {
        return score;
    }

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

    @Override
    public String say() {
        return super.say() + "\t" + "score=" + score;
    }

    public void study() {
        System.out.println("学生" + getName() + "在学习");
    }
}
public class Teacher extends Persion{
    private double salary;

    public Teacher(String name, int age, double salary) {
        super(name, age);
        this.salary = salary;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    //重写say方法
    @Override
    public String say(){
        return super.say() + "\t" + "salary=" + salary;
    }

    public void teach() {
        System.out.println("老师" + getName() + "在教书");
    }
}
public class Test {
    public static void main(String[] args) {
        Persion[] persion = new Persion[5];

        persion[0] = new Persion("z", 1);
        persion[1] = new Student("x", 2, 66);
        persion[2] = new Student("c", 3, 77);
        persion[3] = new Teacher("v", 4, 2500);
        persion[4] = new Teacher("b", 5, 25000);

        for (int i = 0; i < persion.length; i++) {
            System.out.println(persion[i].say());
            if (persion[i] instanceof Student) {
                Student student = (Student) persion[i];
                student.study();
            } else if (persion[i] instanceof Teacher) {
                Teacher teacher = (Teacher) persion[i];
                teacher.teach();
            }
        }
    }
}

== 和 equals

                == 是一个比较运算符

1.既可以判断基本类型,也可以判断引用类型

2.如果是基本类型,判断的是值是否相等

3.如果是引用类型,判断的是地址是否相等,即判断是不是同一个对象。

                equals 是Object类中的方法

默认判断的是地址是否相等,子类往往重写该方法,用于判断内容是否相等

hashCode

        返回该对象的哈希码值,支持此方法是为了提高哈希表的性能。

1.提高具有哈希结构的容器的效率

2.两个引用,如果指向的是同一个对象,则哈希值肯定是一样的。

3.两个引用,如果指向的是不同对象,则哈希值是不一样的。

4.哈希值主要根据地址号来的,不能完全将哈希值等价于地址。

toString 方法

                基本介绍:

        默认返回:全类名(包名 + 类名) + @ + 哈希值的十六进制。子类往往重写toString方法,用于返回对象的属性信息。

        重写 toString 方法,打印对象或拼接对象时,都会自动调用该对象的toString形式。

        当直接输出一个对象时,toString 方法会被默认的调用,比如:

System.out.println(monster);        就会默认调用 monster.toString()

finalize方法

        当对象被回收时,系统自动调用该对象的 finalize 方法。子类可以重写该方法,做一些释放资源的操作。

        什么时候被回收:当某个对象没有任何引用时,则 jvm 就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁该对象之前,就会调用 finalize 方法。

Ending: 

        OK,本篇文章就到此结束了,非常感谢你能看到这里,所以如果你觉得这篇文章对你有帮助的话,请点一个大大的赞,支持一下博主,若你觉得有什么问题或疑问,欢迎私信博主或在评论区指出~ 


http://lihuaxi.xjx100.cn/news/1905578.html

相关文章

C语言—每日选择题—Day57

指针相关博客 打响指针的第一枪&#xff1a;指针家族-CSDN博客 深入理解&#xff1a;指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 下面程序段&#xff08;&#xff09; char *str[] {"ABC", "DEF", "GHI"}; puts(str[1]); A&#xff1a;A…

掌握pip的基本命令和高级用法:轻松管理Python包

掌握pip的基本命令和高级用法 一、简介二、安装和配置pip三、基本命令和用法3.1、安装和卸载包3.2、包管理3.3、包依赖管理3.4、虚拟环境管理 四、高级用法4.1、自定义pip的配置4.2、使用requirements.txt文件管理项目依赖4.3、创建和发布自己的Python包4.4、使用pip下载非Pyth…

开展人事档案数字化需要注意什么

人事档案数字化是指将传统的纸质人事档案转化为数字形式&#xff0c;并通过信息技术进行管理和存储的过程。这种方式可以提高人事档案的管理效率、减少文件存储空间&#xff0c;方便查询和检索信息&#xff0c;同时减少人为错误和损毁风险。 专久智能认为开展人事档案数字化需要…

C#文件操作(一)

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第20章《文件》 二、操作文件的相关类 在C#应用程序中Syste.IO名称空间包含用于在文件中读写数据的类。在此我列举一下File、Directory、Path、FileInfo、DirectoryInfo、FileSystemInfo、FileSystemWatcher。其中在Syste…

CTF-PWN-堆-【use after free-2】

文章目录 fheap libc 2.23 64位检查maincreatedelete 思路覆盖目标函数的指针printf内部调用覆盖的函数前调用 printf时的栈实际去的函数的地方查找当前版本对应的libc_start_main和system计算出system的libc基地址exp fheap libc 2.23 64位 检查 main 多层while&#xff0c;…

《PySpark大数据分析实战》-16.云服务模式Databricks介绍运行案例

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

JS 实现带手柄自由调整页面大小的功能

当你想实现点击并拖动某个dic元素来调整其大小的时候&#xff0c;我们可以通过如下代码(可直接复制粘贴运行)实现效果&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&qu…

基于Java版本与鸿鹄企业电子招投标系统的二次开发实践-鸿鹄企业电子招投标系统源代码+支持二开+鸿鹄电子招投标系统

随着市场竞争的加剧和企业规模的扩大&#xff0c;招采管理逐渐成为企业核心竞争力的重要组成部分。为了提高招采工作的效率和质量&#xff0c;我们提出了一种基于电子化平台的解决方案。该方案旨在通过电子化招投标&#xff0c;使得招标采购的质量更高、速度更快&#xff0c;同…