首页 > 技术文章 > 继承、方法的重写、Object类及toString方法

laurarararararara 2019-08-12 18:24 原文

extends意思为“扩展”,子类是父类的扩展,实现了代码的重用。

1.父类也称超类、基类、派生类等

2.java中只有单继承,java中类没有多继承,接口有多继承。

3、子类继承父类,可以得到父类全部的属性和方法(除了父类的构造方法),但不可以直接访问父类的私有属性和方法。

4,如果一个类,没有调用extends,则它的父类是java.lang.Object.

instanceof关键词用来判断是不是属于该类型

public class TestExtends {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Student stu=new Student();
        stu.height=160;
        stu.name="laura";
        stu.rest();
        
        Student stu2=new Student("hui",20,"software");
        System.out.println("名字是"+stu2.name+"年龄是"+stu2. height +"专业是"+stu2.major);
        System.out.println(stu2 instanceof Student);
        System.out.println(stu2 instanceof Person);
        System.out.println(stu2 instanceof Object);
        System.out.println(new Person() instanceof Student);//反过来错误,Person不属于Student
    }
}
class Person /*extends Object*/ {   //Ctrl+t键可以查看继承结构
    String name;
    int height;
    void rest(){
        System.out.println("休息一会!");
    }
}
class Student extends Person{
    String major;
    void study(){
        System.out.println("学习两小时");
    }
    public Student(String name,int height,String major){
        this.name=name;
        this.height =height;
        this.major=major;
    }
    public Student(){   //要自己加入构造器 
    }
}

 

 

方法的重写override:子类通过重写父类的方法,可以用自身的行为替换父类的行为。

方法的重写需要符合下面三个条件:

1.方法名,形参列表相同

2.返回值类型和声明异常类型,子类小于等于父类

3.访问权限,子类大于等于父类

 

Object类:是所有java类的根基类,所有java对象都拥有Object类的属性和方法。

 按住ctrl可查看源码:

位于java.lang包,核心包里;Object是所有类的根,每一个类都可以把它当做父类,所有对象包括数组实现了这个类。

可从右侧outline大纲中查看方法:

常用方法:toString    

 

查看toString方法及源码:

输出结果会    返回包名+类名+@+16进制字符串

 

toString方法的重写:

 

"=="和equals:

"=="代表比较双方是否相同,如果是基本类型则表示值相等,如果是引用则表示地址相等即是同一个对象。

equals方法是Object类中提供的一种方法,定义为public boolean equals方法,提供定义“对象内容相等”逻辑。

 

public class TestEquals {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Object obj;
        String str;
        User u1=new User(1706,"laura","1234");
        User u2=new User(1706,"laura","12356");
        System.out.println(u1==u2);
        System.out.println(u1.equals(u2));//重写之后只根据id进行判断
        
        String str1=new String("laur");
        String str2=new String("laur");
        System.out.println(str1==str2);//false   不是一个对象
        System.out.println(str1.equals(str2));//true  同一个内容
    }    
}
class User{
    int id;
    String name;
    String pwd;
    /*右键Source+Generate Constator using fields,可以生成构造器*/
    public User(int id, String name, String pwd) {
        super();
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }
    /*重写equals方法,可以自己生成source+Generate equals*/
    @Override
    public boolean equals(Object obj) {
        if (this == obj)   //如果传进来的obj和对象的相等,则true
            return true;
        if (obj == null)   //若传进来为空,不用比,为false
            return false;
        if (getClass() != obj.getClass())  //若传进来类不一样,不用比
            return false;
        
        User other = (User) obj;  //强制转型为User
        if (id != other.id)
            return false;
        return true;
    }
}

 

 

推荐阅读