Java学习笔记(九)——继承
一、继承
1、概念:
继承是类于类之间的关系,是一种”is a ”的关系
Ps: Java是单继承
2、优势:
(1)子类直接拥有父类的所有属性和方法(除了privata)
(2)实现代码复用
3、语法规则:
4、一个demo
(1)动物类
package com.cnblogs; public class Animal { public int age; public String name; public void eat() { System.out.println("eat"); } }
(2)狗类
package com.cnblogs; public class Dog extends Animal { }
(3)使用
package com.cnblogs; public class Init { public static void main(String[] args) { // TODO Auto-generated method stub Dog dog = new Dog(); dog.eat(); dog.name = "sdfsdf"; dog.age = 20; } }
子类可以直接使用父类除了private之外的成员。
二、方法的重写
1、定义:
如果子类对父类的方法不满意,可以重写父类的方法,调用时优先使用子类的方法。
2、语法规则:
(1)返回值类型 (2)方法名 (3)参数类型和个数
都要与父类继承的方法相同,才是方法的重写
三、继承初始化顺序
1、先初始化父类对象再初始化子类对象
2、先执行初始化对象中属性,再执行构造方法中的初始化
四、final关键字
1、final可以修饰类,方法,属性和变量
(1)修饰类,则该类不允许被继承
(2)修饰方法,则该方法不允许被覆盖(重写)
(3)修饰属性,则该类的属性不会被隐式初始化,(类的初始化属性必须有值)或在构造方法中赋值。
(4)修饰变量,该变量的值只能赋值一次,就是常量
五、super关键字
在对象内部使用,可以代表父类对象
1、访问父类的属性
super.age;
2、访问父类的方法:
super.eat();
3、子类的构造方法过程中必须条用其父类的构造方法。
写和不写super都行
4、如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。
5、如果显示的调用构造方法,必须放在构造方法的第一行
6、如果子类构造方法中既没有显示调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。
六、Java中的Object类
1、Object类
是所有类的父类,如果没有明确使用extends关键字确定标示继承另一个类,那么这个类默认继承Object类
2、Object类中的toString()方法:
(1)toString()方法
返回对象的哈希code码,是唯一区分对象的标识
(2)可以通过重写toString()方法显示对象的属性。
(3)esplice提供的ISE方法:
@Override public String toString() { return "Animal [age=" + age + ", name=" + name + "]"; }
于是乎,在mian中调用
System.out.println(dog);
结果为:
3、Object类中的equals()方法:
(1)比较的是对象的引用是否指向同一块内存地址。
PS:Dog dog = new Dog(); 中的dog只是一个指向dog对象的指针。
(2)一般情况下,是比较两个对象的值是否相等,所以进行重写
生成的代码:
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; }//生成haxi码
@Override public boolean equals(Object obj) { if (this == obj) //如果是同一个对象,就是对的 return true; if (obj == null) //如果obj是空的,肯定不相等 return false; if (getClass() != obj.getClass()) //判断类的对象是否相等 return false; Animal other = (Animal) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }
其中getClass()是得到类对象、
本文作者:Blue Mountain
本文链接:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4947081.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步