Object类
所有类都直接或间接的继承自Object类,Object类是所有Java类的根基类。
也就意味着所有的Java对象都拥有Object类的属性和方法。
如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类。
toString()方法
【1】Object类的toString()的作用:
方法的原理:
现在,使用toString方法的时候,打印出来的东西 “不好看”,对于其他人来说不友好,可读性不好
我们现在是想知道对象的信息,名字,年龄,身高。。。。。。
现在的格式不好:
出现的问题:子类Student对父类Object提供的toString方法不满意,不满意--》对toString方法进行重写:
- package com.star.test01;
- /**
- * @Auther: Starshine
- */
- public class Student /*extends Object*/{
- private String name;
- private int age;
- private double height;
- 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 double getHeight() {
- return height;
- }
- public void setHeight(double height) {
- this.height = height;
- }
- public Student() {
- }
- public Student(String name, int age, double height) {
- this.name = name;
- this.age = age;
- this.height = height;
- }
- public String toString() {
- return "这是一个Student对象,这个对象的名字:"+name+",年龄:"+age+",身高:"+height;
- }
- }
测试类:
总结:toString的作用就是对对象进行“自我介绍”,一般子类对父类提供的toString都不满意,都要进行重写。
IDEA提供了快捷键:
- package com.star.test01;
- /**
- * @Auther: Starshine
- */
- public class Student /*extends Object*/{
- private String name;
- private int age;
- private double height;
- 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 double getHeight() {
- return height;
- }
- public void setHeight(double height) {
- this.height = height;
- }
- public Student() {
- }
- public Student(String name, int age, double height) {
- this.name = name;
- this.age = age;
- this.height = height;
- }
- /*public String toString() {
- return "这是一个Student对象,这个对象的名字:"+name+",年龄:"+age+",身高:"+height;
- }*/
- @Override
- public String toString() {
- return "Student{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", height=" + height +
- '}';
- }
- }
equals方法
- package com.star.test02;
- /**
- * @Auther: Starshine
- */
- public class Phone {//手机类:
- //属性:
- private String brand;//品牌型号
- private double price;//价格
- private int year ;//出产年份
- //方法:
- public String getBrand() {
- return brand;
- }
- public void setBrand(String brand) {
- this.brand = brand;
- }
- public double getPrice() {
- return price;
- }
- public void setPrice(double price) {
- this.price = price;
- }
- public int getYear() {
- return year;
- }
- public void setYear(int year) {
- this.year = year;
- }
- @Override
- public String toString() {
- return "Phone{" +
- "brand='" + brand + '\'' +
- ", price=" + price +
- ", year=" + year +
- '}';
- }
- //构造器:
- public Phone() {
- }
- public Phone(String brand, double price, int year) {
- this.brand = brand;
- this.price = price;
- this.year = year;
- }
- //对equals方法进行重写:
- public boolean equals(Object obj) {//Object obj = new Phone();
- //将obj转为Phone类型:
- Phone other = (Phone)obj;//向下转型,为了获取子类中特有的内容
- if(this.getBrand()==other.getBrand()&&this.getPrice()==other.getPrice()&&this.getYear()==other.getYear()){
- return true;
- }
- return false;
- }
- }
- package com.star.test02;
- /**
- * @Auther: Starshine
- */
- public class Test {
- //这是一个main方法,是程序的入口:
- public static void main(String[] args) {
- //创建Phone类的对象:
- Phone p1 = new Phone("华为P40",2035.98,2020);
- Phone p2 = new Phone("华为P40",2035.98,2020);
- //比较两个对象:p1和p2对象:
- //==的作用:比较左右两侧的值是否想的,要么相等,返回true,要么不相等,返回false
- System.out.println(p1==p2);//-->>>对于引用数据类型来说,比较的是地址值。--->一定返回的是false
- //Object类提供了一个方法 equals方法 :作用:比较对象具体内容是否相等。
- boolean flag = p1.equals(p2);//点进源码发现:底层依旧比较的是==,比较的还是地址值。
- System.out.println(flag);
- }
- }
总结:
equals作用:这个方法提供了对对象的内容是否相等 的一个比较方式,对象的内容指的就是属性。
父类Object提供的equals就是在比较==地址,没有实际的意义,我们一般不会直接使用父类提供的方法,
而是在子类中对这个方法进行重写。
instanceof
利用集成开发工具生成equals方法
【1】利用eclipse:
【2】利用idea:
类和类的关系
代码
总结:
【1】面向对象的思维:找参与者,找女孩类,找男孩类
【2】体会了什么叫方法的性擦,什么叫方法的实参:
具体传入的内容 实参:
【3】类和类可以产生关系:
(1)将一个类作为另一个类中的方法的形参
(2)将一个类作为另一个类的属性
- public class Girl {
- //属性:
- String name;
- double weight;
- Mom m /*= new Mom()*/;
- //方法:
- public void add(int a){//参数是基本数据类型
- System.out.println(a);
- System.out.println(a+100);
- }
- //谈恋爱的方法:
- public void love(Boy b){//参数是引用数据类型Boy
- System.out.println("我男朋友的名字是:"+b.name+",我男朋友的年龄是:"+b.age);
- b.buy();
- }
- //女孩跟妈妈聊天:
- public void wechat(){
- m.say();
- }
- //构造器:
- public Girl(String name, double weight) {
- this.name = name;
- this.weight = weight;
- }
- }
- public class Boy {
- //属性:
- int age;
- String name;
- //方法:
- public void buy(){
- System.out.println("跟我谈恋爱,我给你买买买。。。");
- }
- //构造器:
- public Boy(int age, String name) {
- this.age = age;
- this.name = name;
- }
- }
- public class Mom {
- //方法:
- public void say(){
- System.out.println("妈妈唠唠叨叨 都是爱,听妈妈的话。。");
- }
- }
- public class Test {
- //这是一个main方法,是程序的入口:
- public static void main(String[] args) {
- //创建一个Boy类的具体的对象:
- Boy boy = new Boy(30,"鹿晗");
- //创建一个Girl类的具体的对象:
- Girl girl = new Girl("关晓彤",100);
- //谈恋爱:
- //girl.love(boy);
- Boy boy2 = new Boy(35,"陈伟霆");
- girl.love(boy2);
- //还可以跟妈妈微信聊天:
- girl.m = new Mom();
- girl.wechat();
- }
- }