二十、继承
来源:互联网 发布:怎样连接网络电视 编辑:程序博客网 时间: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()还是==都是输出“不相同”。
- 二十、继承
- Objective-C学习笔记十:继承二
- 二十、继承(三)Point这类物件
- 二十七、继承(十)抽象的物件类型
- C#高级编程二十三天----实现继承
- 十一周——继承与派生——项目二 摩托车继承自行车和机动车
- 二十
- 二十
- 二十
- JAVA学习十:继承
- maven(十)-继承
- 继承《二》
- JavaScript学习总结(二十)——Javascript非构造函数的继承
- JavaScript学习总结(二十)——Javascript非构造函数的继承
- JavaScript学习总结(二十)——Javascript非构造函数的继承
- (十)继承四(多继承)
- 十、继承、多态、类扩展
- c++继承(二)菱形继承
- 近况整理
- SGU 507 Treediff 启发式合并
- Appium移动 自动化测试-环境搭建(1)
- 让Spring架构减化事务配置
- (HDOJ)Children's Queue(java大数大法好)
- 二十、继承
- Redis个人总结及代码实现
- 有关内存空间
- ubuntu的终端里面,随意点击就出现ctrl+C的效果,出现^C
- python基础入门 01
- windows 控制台cmd乱码(及永久修改编码)的解决办法
- [BFS] UVA 11624
- 源码编译安装ss
- 我的小小学习笔记(7)之C++------模板之模板函数