二十、继承

来源:互联网 发布:怎样连接网络电视 编辑:程序博客网 时间:2024/05/21 22:23

1、继承是类与类之间的关系
java中的继承是单继承
子类拥有父类所有的属性和方法,private修饰的无效
实现代码复用
class Dog extends Animal{
…………
}
2、方法重写
如果子类对继承父类的方法不满意,可以重写父类继承的方法,当调用方法时会优先调用子类的方法

语法规则:返回值类型,方法名,参数类型及个数都要和父类继承的方法相同。
3、继承的初始化顺序
初始化父类再初始化子类
先执行初始化对象中的属性,在执行构造方法中的初始化
创建对象的时候,会先执行父类中的构造方法,在执行子类中的构造方法。
这里写图片描述
3、final关键字
不可修改,不可变化
修饰类,则该类不允许被继承
修饰方法,则该类方法不允许被重写
修饰属性,则该类的属性不会进行隐式的初始化(类的初始化必须有值)或者在构造方法中赋值,但是只能选择其一。且只能赋一次值。
修饰变量,则该变量只能赋一次值,即变为常量。
4、super关键字
在对象内部使用,可以代表父类对象
访问父类的属性:super.age
访问父类的方法:super.方法()
在子类中访问父类的属性和方法,要在子类中创建一个方法,用super访问父类。
super的应用
子类的构造过程当中必须强调用其父类的构造方法
public Dog(){
super();//隐式使用父类的构造方法,有没有这一句都会调用父类的构造方法
System.out.println(“DOG”);
}
如果子类的构造方法中没有显式调用父类的构造方法,则系统默认调用父类无参的构造方法。
如果显式调用父类的构造方法,必须放在子类构造方法的第一行
如果子类构造方法中既没有显式调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。
(如果程序中有有参的构造方法,系统不会自动生成无参的构造方法)
5、Object类
<1>Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类。
Object类中的方法,适合所有子类。
toString()方法
在Object类里面定义toString()方法的时候返回的对象的哈希编码(对象地址字符串)
可以通过重写toString()方法标识出对象的属性。

右键Source–Generate toString()

public class Telphone {    /**     * @param args     */    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Telphone(){        name="iphone";    }    @Override    public String toString() {        return "Telphone [name=" + name + "]";    }//如果没有这个方法,会输出对象在内存中的地址com.imooc.Telphone@544a5ab2    public static void main(String[] args) {        // TODO Auto-generated method stub        Telphone tel=new Telphone();        System.out.println(tel);    }}输出Telphone [name=iphone]

<2>equals()方法
比较的是对象的引用是否指向同一块内存地址。
一般情况下比较两个对象时比较他的值是否一致,需要重写equals()方法。

重写equals()方法(右键Source–Generate hashcode() and equals())

@Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())//得到类对象,new的时候叫类的对象。类对象和类的对象,类对象描述的是类的代码信息,有哪些属性类型,方法。类的对象关注的是数据信息,属性的值的信息。            return false;//两个对象的类型是否相同        Telphone other = (Telphone) obj;        if (name == null) {            if (other.name != null)                return false;        } else if (!name.equals(other.name))            return false;        return true;    }

Main()函数

Telphone tel=new Telphone();        tel.name="ipone";        Telphone tel2=new Telphone();        tel2.name="ipone";        if(tel.equals(tel2)){            System.out.println("两个对象是相同的");        }else{            System.out.println("不相同");        }

输出:两个对象是相同的
如果换成“==”,输出“不相同”
如果没有重写equals()方法,不管是用equals()还是==都是输出“不相同”。