Object类介绍

Object类


 

  • Object类是所有类的父类
  • 一个类没有使用extends关键字明确标识继承关系,则默认继承Object类(包括数组)
  • Java中的每个类都可以使用Object中定义的方法
  • Java™ Platform, Standard Edition 8 API Specification

 
 

equals测试


 

  • 继承Object中的equals方法时,比较的是两个引用是否指向同一个对象
  • String类型重写了equals方法,因此比较的是两个字符串的内容
  • 子类可以通过重写equals方法的形式,改变比较的内容
  • 例:
//  方法重写
	public boolean equals(Object obj){
		if(obj==null)
			return false;
		Animal temp=(Animal)obj;
		if(this.getName().equals(temp.getName()) && (this.getMonth()==temp.getMonth()))
				return true;
		else
			return false;
	}

//	方法重载
	public boolean equals(Animal obj){
		if(this.getName().equals(obj.getName()) && (this.getMonth()==obj.getMonth()))
				return true;
		else
			return false;
	}

 
 

toString测试


 

  • 输出对象名时,默认会直接调用类中的toString
  • 继承Object中的toString方法时,输出对象的字符串表现形式:类型信息+@+地址信息
  • 子类可以通过重写toString方法的形式,改变输出的内容以及表现形式
  • 例:
public String toString() {
		return "昵称:" + this.getName() + ";年龄:" + this.getMonth();
	}

 
 

案例总结


 

public class Person{
    //私有属性:name(姓名)、age(年龄)、sex(性别)
    private String name;
    private int age;
    private char sex;
     
 
    public Person(){}
    //带参构造方法(name、age、sex为参数)
    public Person(String name,char sex,int age){
        this.setName(name);
        this.setAge(age);
        this.setSex(sex);
    }
     
    //通过封装实现对属性的get/set方法设定
    public String getName(){
        return this.name;
    }
    public void setName(String name){
        this.name = name;
    }
     
    public int getAge(){
        return this.age;
    }
    public void setAge(int age){
        this.age = age;
    }
     
    public char getSex(){
        return this.sex;
    }
    public void setSex(char sex){
        this.sex = sex;
    }
     
    //重写toString方法,表示形式为:姓名:+**+  年龄:+**+  性别:+**
    public String toString(){
        String srt = "姓名: " + this.getName() + "\t年龄:" + this.getAge() + "\t性别: " + this.getSex();
        return srt;
     }
     
}
//测试类
public class Test {
    public static void main(String[] args) {
       //实例化对象,传入属性值(李明, 男,18)
        Person ps = new Person("李明",'男',18);
       //打印输出对象信息
       System.out.println(ps);
       System.out.println(ps.toString());
    }
}

 
 

final关键字的使用


 

  • final class:该类没有子类
    • public final calss
  • final 方法:该方法不允许被子类重写,但是可以正常被子类继承使用
    • 可以被继承
    • 不能修饰构造方法
  • final 方法内局部变量:只要在具体被使用之前进行赋值即可,一旦赋值不允许被修改
  • final 类中成员属性:
    • 可在定义时直接初始化
    • 可在构造方法中初始化
    • 可在构造代码块中初始化
  • 修饰变量表示不允许被修改
    • 基本数据类型的变量:初始赋值之后不能更改
    • 引用类型的变量:初始化之后不能再指向另一个对象,但对象的内容是可变的
  • 使用final修饰可以提高性能,但会降低可扩展性

 
 

注解


 

  • JDK1.5版本引入的一个特性
  • 可以声明在包、类、属性、局部变量、方法参数等的前面,用来对这些元素进行说明、注释
  • 按照运行机制分
    • 源码注解
    • 编译时注解
    • 运行时注解
  • 按照来源分
    • 来自JDK的注解
    • 来自第三方的注解
    • 我们自己定义的注解
  • 例:@Override
    • 用于检测被注解的重写父类方法是否合理
	 @Override
	public void eat() {
		// TODO Auto-generated method stub
		super.eat();
	}

 
 

案例总结


 

public class Fruits {
    // 私有属性:水果的形状(shape)和口感(taste)
    private String shape;
    private String taste;
     
    //无参构造
    public Fruits() {
 
    }
 
    // 带参构造函数(参数为shape和taste)
    public Fruits(String shape,String taste) {
        this.setShape(shape);
        this.setTaste(taste);
    }
 
    // 通过封装实现对私有属性的get/set访问
    public String getShape() {
        return shape;
    }
 
    public void setShape(String shape) {
        this.shape = shape;
    }
 
    public String getTaste() {
        return taste;
    }
 
    public void setTaste(String taste) {
        this.taste = taste;
    }
     
    // 创建无参无返回值得方法eat(描述内容为:水果可供人们食用!)
    public void eat() {
        System.out.println("水果可供人们食用!");
    }
 
    // 重写equals方法,比较两个对象是否相等(比较shape,taste)
    @Override
    public boolean equals(Object obj) {
        if(obj == null)
            return false;
        Fruits fs = (Fruits)obj;
        if(this.getShape().equals(fs.getShape()) && this.getTaste().equals(fs.getTaste())) 
            return true;
        else
            return false;
         
    }
     
     
}
public final class Waxberry extends Fruits {
    // 私有属性:颜色(color)
    private String color;
     
    public Waxberry() {}
     
    // 创建构造方法,完成调用父类的构造方法,完成属性赋值
    public Waxberry(String shape,String taste,String color) {
        super(shape,taste);
        this.setColor(color);
    }
     
    //getter setter
    public String getColor() {
        return color;
    }
 
    public void setColor(String color) {
        this.color = color;
    }
     
    // 创建不允许重写的face方法,描述为:杨梅:**、**,果味酸甜适中
    public final void face() {
        System.out.println("杨梅:" + this.getColor() + "、" + super.getShape()+",果味酸甜适中");
    }
 
    // 重写父类eat方法,描述为:杨梅酸甜适中,非常好吃!
    @Override
    public void eat() {
        System.out.println("杨梅酸甜适中,非常好吃!");
    }
     
     
    // 重写toString方法,输出的表现形式不同(输出shape,color,taste)
    @Override
    public String toString() {
        String str = "杨梅的信息:果实为" + super.getShape() + "、" + this.getColor()+","+this.getTaste()+
                ",非常好吃!";
        return str;
    }
}
public class Banana extends Fruits{
   // 私有属性:品种(variety)
    private String varitey;
 
    public Banana() {}
     
    //创建带参构造方法为所有属性赋值
    public Banana(String shape,String taste,String varitey) {
        super.setShape(shape);
        super.setTaste(taste);
        this.setVaritey(varitey);
    }
     
    public String getVaritey() {
        return varitey;
    }
 
    public void setVaritey(String varitey) {
        this.varitey = varitey;
    }
 
    //创建无参无返回值的advantage方法,描述为:**果形**,果肉香甜,可供生食。
    public void advantage() {
        System.out.println(this.getVaritey()+"果形" + this.getShape()+",果肉香甜,可供食用");
    }   
     
    //创建重载advantage方法(带参数color),描述为:**颜色为**
    public void advantage(String color) {
        System.out.println(this.getVaritey()+"颜色为" + color);
    }
     
}
public class Test {
    public static void main(String[] args) {
        // 实例化2个父类对象,传入两组相同的参数值
        Fruits f1 = new Fruits("圆圆的","酸辣");
        Fruits f2 = new Fruits("圆圆的","酸辣");
         
        // 调用父类eat方法
        f1.eat();
         
 
        // 测试重写equals方法,判断两个对象是否相等
        boolean a = f1.equals(f2);
        System.out.println("f1和f2的引用比较:" + a);
 
    System.out.println("————————————————————————————————————————");
        // 实例化子类对象,并传入相关参数值
        Waxberry wb = new Waxberry("圆形","酸甜适中","紫红色");
 
        // 调用子类face方法和eat方法
        wb.face();
        wb.eat();
 
        // 测试重写toString方法,输出子类对象的信息
        System.out.println(wb);
 
        System.out.println("——————————————————————————————————————————————");
        // 实例化Banana类对象,并传入相关参数值
        Banana b = new Banana("短而稍圆","果肉香甜","仙人掌");
     
        // 调用子类的advantage和它的重载方法
        b.advantage();
        b.advantage("黄色");
 
    }
}

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值