Java—继承
- 继承
- 继承是类与类的一种关系,是一种“is a”的关系。注意:java中的继承是单继承,一个类只有一个父类。
- 继承的好处:子类拥有父类的所有属性和方法(private修饰的无效),实现代码的复用
- 语法规则:class 子类 extends 父类{}
- 父类对象的属性和子类对象的属性并没有关系,是两个属性
- 方法的重写
- 如果子类对继承父类的方法不满意,可以重写父类继承的方法的,当调用方法时会优先调用子类的方法。
- 语法规则:返回值类型、方法名、参数类型及个数,都要与父类继承的方法相同。
- 继承的初始化顺序
当我们创建一个对象的时候,所执行的构造方法相当于初始化一个对象
- 先初始化父类再初始化子类
- 先执行初始化对象中的属性,再执行构造方法中的初始化

Animal.java
package com.test;
public class Animal {
public int age = 2;
public String name;
public void eat() {
System.out.println("动物具有吃东西的能力");
}
public Animal(){
System.out.println("animal的构造方法");
age = 4;
}
}
Dog.java
package com.test;
public class Dog extends Animal {
public void eat() {
System.out.println("年龄"+age+"岁的狗是可以吃东西的");
}
public Dog(){
System.out.println("dog的构造方法");
}
}
Initail.java
package com.test;
public class Initail {
public static void main(String[] args) {
Dog dog = new Dog();
//dog.age = 1;
dog.eat();
}
}
运行Initail.java,执行结果:
animal的构造方法
dog的构造方法
年龄4岁的狗是可以吃东西的
- final关键字
使用final关键字做标识有“最终的”含义
- final修饰类,则该类不允许被继承
- final修饰方法,则该方法不允许被覆盖(重写)
- final修饰属性,则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)
- final修饰变量,则该变量的值只能赋一次值,即变为常量。
- super关键字
在对象的内部使用,可以代表父类对象
- 访问父类的属性:super.属性
- 访问父类的方法:super.方法
- 子类的构造的过程中必须调用其父类的构造方法。
- 如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。
- 如果显式的调用构造方法(super();),必须在子类的构造方法的第一行。
- 如果子类构造方法中既没有显式调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。
- Object类
Object类是所有类的父类,如果一个类没有extend是关键字明确标识继承另外一个类,那么这个类默认继承Object类
Object类中的方法,适合所有子类
- toString()方法:在Object类里定义toString()方法的时候返回对象的哈希code码(对象地址字符串),可以通过重写toString()方法表示出对象的属性
package com.test; public class Cat extends Animal{
public int age = 2; @Override
public String toString() {
return "Cat [age=" + age + "]";
} }package com.test; public class Initail {
public static void main(String[] args) {
Cat cat = new Cat();
System.out.println(cat);
}
}如果Cat类没有重写toString(),运行结果是:com.test.Cat@2a139a55;如果Cat重写toString(),运行结果是:Cat [age=2]
- euqals():比较的是对象的引用是否指向同一块内存地址。一般情况下比较两个对象时比较他的值是否一致,所以要重写equals()
package com.test; public class Cat extends Animal{
public int age = 2;
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Cat other = (Cat) obj;
if (age != other.age)
return false;
return true;
}
}如果运算符“==”两侧是引用类型数据,比较的并不是“值”本身,而是在内存的地址。
注:通过new创建对象的时候,得到的对象是类的对象,obj.getClass()得到的是类对象。类对象描述的是类的代码信息,类的对象描述的是对象的数据信息。
System.out.println(cat.getClass());输出结果:class com.test.Cat
Java—继承的更多相关文章
- Java继承与组合
Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...
- JAVA继承时构造函数的问题
今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...
- Java继承和接口
接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...
- Java继承的初始化
/** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...
- Java—继承、封装、抽象、多态
类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...
- java继承关系中成员变量,构造方法,成员方法的关系
Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...
- JAVA继承时this和super关键字
JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...
- JAVA 继承中的this和super
学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...
- java 继承、重载、重写与多态
首先是java 继承.重载和重写的概念 继承: 继承的作用在于代码的复用.由于继承意味着父类的所有方法亦可在子类中使用,所以发给父类的消息亦可发给衍生类.如果Person类中有一个eat方法,那么St ...
- Java 继承中构造方法的执行顺序问题
在Java中,如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器:如果显式创建了有参构造器则该类就不再有默认无参构造器. 在Java继承中,构造器并不能被继承,而是被显示或隐式调用. 1. ...
随机推荐
- 老男孩python作业3-购物车程序优化
购物车优化要求:用户入口: 1.商品信息存在文件里 2.已购商品,余额记录.第一次启动程序时需要记录工资,第二次启动程序时谈出上次余额 3.允许用户根据商品编号购买商品 4.用户选择商品后,检测是否够 ...
- php curl 请求api 接口
官方文档curl : http://www.runoob.com/php/php-ref-curl.html php开启curl : ① 打开 php.ini 文件 extension=php_c ...
- 查看php 相关信息
PHP系统常量 __FILE__ 当前PHP程序脚本的绝对路径及文件名称 __LINE__ 存储该常量所在的行号 __FUNCTION__ 存储该常量所在的函数名称 __CLASS__ 存储该常量所在 ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_方法执行
[前言] 方法执行前,CLR 会检测方法内代码引用的所有类型.同时 CLR 会分配一个内部数据结构,用来管理对所有引用的类型的访问. 首次执行方法时,托管程序集会把 IL 转换成本地 CPU 指令,并 ...
- Codeforces Beta Round #87 (Div. 2 Only)-Party(DFS找树的深度)
A company has n employees numbered from 1 to n. Each employee either has no immediate manager or exa ...
- Spring Boot如何初始化数据
Hibernate机制:classpath下的import.sql,l在ddl-auto是create和create-drop时自动执行,如果ddl-auto设置为update就不合适,所以此选项不适 ...
- sf01_什么是数据结构
数据结构解决什么问题 如何在计算机中存储数据和信息,采用什么样的方法和技巧加工处理这些数据,都是数据结构需要努力解决的问题. 解决问题的步骤 使用计算机解决问题的步骤:分析具体问题得到数学模型,设计解 ...
- 标签li设为display inline-block后间距问题
在对导航栏做水平排列的时候,我们往往对li元素设为display:inline-block 目的是为了,让所有li元素并排在一起,但是遇到个问题,我们的标签之间会产生空白边距 如图所示: 这样看上去, ...
- [转]怎么样快速入门AngularJS?
本文转自:http://www.ngnice.com/posts/205af1ea1e13d2 怎么样快速学习AngularJS? 相信很多初学者都有过或者类似的疑问,其实这个问题没有标准的答案,每个 ...
- pat1002. A+B for Polynomials (25)
1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue T ...