继承
是类与类的一种关系, “is a”,只有一个父类
子类拥有父类的所有属性和方法,除了private,实现代码复用, class 子类 extends 父类 { ... }
● 方法重写
如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法。
语法规则:
a.返回值类型 b.方法名 c.参数类型及个数
都要与父类继承的方法相同,才叫方法的重写
package com.demo; public class Animal { public int age; public String name; /**Viod表示空类型,它跟int,float是同地位的,一般用在没有返回值的函数中,比如你写void main (),主函数完了不用写return 语句,但是如果是int main ()或者是main (),你不写return 语句它就会有warning */ public void eat(){ System.out.println("动物具有吃东西能力"); } } package com.demo; public class Animal { public int age; public String name; public void eat(){ System.out.println("动物具有吃东西能力"); } } package com.demo; public class Dog extends Animal { public void eat(){ System.out.println("年龄:" + age + "狗具有吃东西能力"); } } 子类对父类方法的重写必须具有相同的方法名称,参数列表和返回值类型的,只有访问权限是不能比原方法更严格。 方法的组成:修饰符+返回值+方法名+(参数列表)+{方法体} 重写:返回值和方法名及参数列表相同,方法体不同; 重载:返回值和方法名相同,参数列表不同。
● 继承的初始化顺序
父类对象->属性初始化->构造方法->子类对象->属性初始化->构造方法
● final关键字
final: 修饰的类不允许被继承;
修饰的方法,子类不允许重写(覆盖);
修饰的属性不允许在其他位置修改值,且只能赋值一次,要么现场赋值,要么构造方法赋值,系统不会分配默认值,所以必须赋值。
修饰的变量不允许被修改值,所以可称为常量。
● super关键字
在对象内部,可以代表父类对象
访问父类属性 super.age访问父类方法 super.eat()super的应用 1.子类的构造的过程当中必须调用其父类的构造方法。 2.如果子类的构造方法中没有显示的调用父类的构造方法, 则系统默认调用父类的无参构造方法。 3.如果显示的调用构造方法,必须在子类的构造方法第一行。4.如果子类的构造方法中没有显示调用父类的构造方法,而父类没有无参构造,则变易出错。
● Object类
Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类。Object类中的方法,适合所有子类。1.toString()方法 在Object类里面定义toString()方法的时候返回的对象的哈希code码(对象地址字符串)。
com.imooc.Telphone@60ec2ea8(唯一区分对象,有一个生成的规律或是算法,计算机世界里这个算法就是哈希码)可以通过重写toString()方法表示出对象的属性。2.equals()方法 比较的是对象的引用是否指向同一块内存地址重写的方式: source->generate toString() 他就会根据我们对象的属性帮我们生成一个toString()方法来输出属性值要使用equals()比价值是否相同的时候,很多情况下需要重新重写equals()方法getclass() 类对象 new一个对象得到的是类的对象 类对象obj.getClass( ) 是描述的是代码信息 类的对象obj 是对象的属性值的信息(数据信息) 默认继承 Object 的 toString( ) 方法,输出对象地址类对象和类的对象不同;类对象指的是属性;类的对象指的是值equals()----返回值是布尔类型 比较的是对象的引用是否指向同一块内存地址-------对象实例化时,即给对象分配内存空间 使用方法如:dog.equals(dog2); 如果是两个对象,但想判断两个对象的属性是否相同,则重写equals()方法 1.地址是否相同----if (this == obj) 2.对象是否为空----if (obj == null) 3.getClass()可以得到类对象,判断类型是否一样-----if (getClass() != obj.getClass()) new出来的是类的对象,关注的是类的属性的具体的数据; 类对象是类的代码信息,关注的是类有什么属性和方法 4.属性值是否一样----if (age != other.age)