1.什么是继承

子类继承父类就是对父类的扩展,继承时会自动拥有父类所拥有的处private之外的所有成员
作用:增加代码复用
语法格式:

class 子类名 extends 父类名{
…………
}第9章 Java类的三大特性之一:继承
例子:

 //测试类,创建子类对象,可以直接调用属性和方法
public class testDog {
public static void main(String[] args) {
Dog dog = new Dog();
dog.age=10;
dog.name="旺财";
dog.eat();
}
} //子类,没有写任何方法
public class Dog extends Animal { } //测试类,创建子类对象,可以直接调用属性和方法
public class testDog {
public static void main(String[] args) {
Dog dog = new Dog();
dog.age=10;
dog.name="旺财";
dog.eat();
}
} …………………………
动物具有吃东西的能力

2.继承中的方法的重写

子类在继承父类之后,可以把这个方法重写,并优先调用子类的方法,就近原则。
方法重写是在继承时候对父类中存在的方法重新定义,重载是指一个类中有几个方法的名字是不一样的,只有在接收不同的参数时,才会调用对应的那个方法
继承时方法的重写有一些限制:
1.返回值类型
2.方法名
3.参数类型及个数
上面三个都要与父类继承的方法相同,如此才叫方法的重写
例子:

 //父类
public class Animal {
public String name;
public void eat(){
System.out.println("动物"+name+"是可以吃东西的");
}
} //子类,重写了eat()方法
public class Dog extends Animal { public void eat() {
System.out.println("这里是在子类中重写的方法");
}
} //测试类,创建子类对象,可以直接调用属性和方法
public class testDog {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name="旺财";
dog.eat();
}
} ………………
这里是在子类中重写的方法

3.继承初始化顺序

继承的初始化顺序:
1.使用类的时候都是在创建对象的时候,在创建子类对象时,是先初始化子类还是先初始化父类呢?

答案是先初始化父类再初始化子类

这个可以通过分别在父类和子类构造函数中打印语句,肯定是父类先打印出来
2.既然是先初始化父类再初始化子类,那么是先初始化属性还是先初始化构造方法呢?

答案是先初始化属性,再初始化构造方法

总结:创建一个子类对象时,先初始化父类的属性,然后初始化父类构造方法;再初始化子类属性,然后子类构造方法

4.父类中final的使用

final关键字:
使用final关键字做标识有“最终的”含义
final可以修饰类,方法,属性,变量
若修饰类:则该类不允许被继承
若修饰方法:则该方法不允许被重写(覆盖)
若修饰属性:则该类的属性不会进行隐式的初始化(类的初始化属性必须有值),或在构造方法中赋值(但只能选其一)
若修饰变量:则该变量的值只能在定义的时候赋值,即变为常量

5.子类中super的使用

super关键字:

在对象的内部使用,可以代表父类对象

1.访问父类的属性

super.age

2.访问父类的方法

super.eat()

注意:
父类对象的属性和子类对象的属性并无关系,是两个属性

super与构造方法之间的关系:
1.子类的构造过程当中必须调用父类的构造方法
举个例子:创建子类对象的时候,父类的构造方法也会执行,相当与在子类的构造方法中隐式的写了一个super

 //父类
public class Animal {
public Animal(){
System.out.println("父类执行了");
} } //子类
public class Dog extends Animal {
public Dog(){
//子类构造方法,此处隐式写了一个super
System.out.println("子类执行了");
} } //测试类,创建子类对象
public class testDog {
public static void main(String[] args) {
Dog dog = new Dog();//创建子类对象 }
} ………………
父类执行了
子类执行了

2.如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。

3.如果显示的调用构造方法,必须在子类的构造方法的第一行,显示调用用super();

4.如果子类构造方法中记没有显示调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。

解释:父类默认是有无参构造方法的,如果自己定义了一个有参的构造方法,则不会再自动添加无参构造方法。而子类构造方法中,如果没有super(),则默认只会调用父类的无参构造方法,如果要调用父类的有参构造方法,则只需要在super(参数);

例子:

 //父类
public class Animal {
public int age;
public Animal(int age){
this.age=age;
System.out.println("父类执行了"+this.age);
} } //子类
public class Dog extends Animal {
public Dog(){
super(10);
System.out.println("子类执行了");
} } //测试类,创建子类对象
public class testDog {
public static void main(String[] args) {
Dog dog = new Dog(); }
}

总结一下,其实上面说了这么多就一个意思:

如果父类有无参构造方法,super()写不写没关系,如果没有无参构造方法,则需要写super(),并用super()传递参数

6.Java的Object类

1.Object类是所有类的父类,如果一个类没有使用extends,关键字明确标识继承另外一个类,那么这个类默认继承Object
2.Object类中的方法,适合所有子类
3.Object类中的几种方法:
toString()方法:
Object类里面定义的toString方法是返回对象的哈希码(对象地址字符串)
如果直接输出对象名,就会执行toStirng()方法,例如:

System.out.println(实例化对象名)

可以通过在子类中重写toString()方法输出对象的属性

public String toString(){
return "Dog[age"+age+"]";
}

equals()方法
源码中比较的是对象的引用是否指向统一块内存地址,
子类中可以修改为比较两个对象的值是否相等。可以这样修改:

 //父类
public class Animal {
public int age; } //子类
public class Dog extends Animal {
@Override
public boolean equals(Object obj) {
if (this==obj) //判断引用的地址是否相同
return true;
if (obj==null) //判断比较的值是不是空值
return false;
if (getClass()!=obj.getClass()) //比较两个对象类的的代码信息
return false;
Dog other = (Dog) obj;
if (age != other.age) //判断两个对象的属性值是否相等
return false;
return true;
}
} //测试类,创建子类对象
public class testDog {
public static void main(String[] args) {
Dog dog = new Dog();
Dog dog2 = new Dog();
if(dog.equals(dog2)){
System.out.println("两个对象是相同的");
}else{
System.out.println("两个对象是不相同的");
} }
}

第9章 Java类的三大特性之一:继承的更多相关文章

  1. 第10章 Java类的三大特性之一:多态

    1.Java中的多态 多态是指对象的多种形态,主要包括这两种: 1.1引用多态 a.父类的引用可以指向本类的对象b.父类的引用可以指向子类的对象举个例子:父类Anmail,子类Dog,可以使用父类An ...

  2. 第8章 Java类的三大特性之一:封装

    1.什么是封装 1.1概念 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问.主要是类的属性 1.2好处 a.只能通过规定的方法访问数据b.隐藏类 ...

  3. Java学习笔记二十一:Java面向对象的三大特性之继承

    Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...

  4. Java 面向对象的三大特性之一 继承

    继承: Java是继承的三大特性之一,是Java中实现代码重用的手段之一 将重复的代码抽取到父类中继承的有点或者现实 优点: 方便修改代码 减少代码量 Java中继承的语法: 修饰符 SubClass ...

  5. Java中面向对象三大特性之继承

    1. 继承的概述 继承就是子类继承父类的变量和方法,下面用代码解释一下: class Student {// 定义学生类 String name; int age; void study() { Sy ...

  6. python - class类 (四) 三大特性之一 :继承

    继承: #继承 #什么时候用继承? # 1.当类之间有显著的不同,并且较小的类是较大的类的所需的组建时,用组合比较好. # 2.当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好 # ...

  7. Java中面向对象三大特性之——继承

    继承的概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可. 现实生活中继承:子承父业,用来描述事物之间的关系 代码中继承:就是用 ...

  8. JAVA 类的三大特性,封装,继承,多态 的一些发现总结

    < 一 > 封装 < 二 > 继承 1,关于父类中的私有属性和方法,子类能不能访问的问题 1.1,子类不能通过继承拥有父类的私有属性和方法 1.2,子类可以从父类继承下来的 方 ...

  9. 2.Java面向对象编程三大特性之继承

    在<Think in Java>中有这样一句话:复用代码是java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复用代码并对其加以改变是不够的,他还必须能够做更多的事情.复用 ...

随机推荐

  1. 从零开始学 Java - log4j 项目中的详细配置

    你还会用笔来写字么 我是不怎么会了,有时候老是拿起笔之后不知道这个字怎么写,这时候就会拿起手机去打出来:有时候还会写出来这个字之后越看越不像,这时候就开始怀疑自己的能力了:有时候写出来了一大堆字之后, ...

  2. IT基础架构规划方案二(计算机系统与机房规划规划)

    计算机系统规划       服务器硬件选型规划方案       根据对某集团的实际调研,获取了企业业务应用系统的建设情况,随着企业信息化建设的推进,需要对各种信息化管理系统和应用系统的服务器选型进行选 ...

  3. java web学习总结(十一) -------------------基本概念使用Cookie进行会话管理

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

  4. Google LOGO现代舞舞蹈动画

    效果预览:http://hovertree.com/texiao/js/5.htm 截图: HTML文件代码: <!DOCTYPE html> <html xmlns="h ...

  5. 关于在线编辑器的选择:tinymce - nilcms

    一开始使用的是百度开发的编辑器:ueditor.使用方便,很容易就部署了.现在发现此编辑器也就做一些安全性的更新,而且对于这个编辑器也越来越不喜欢了. 1.臃肿.[1.4.3.3 PHP 版本].下载 ...

  6. 各大互联网公司前端面试题(HTML/CSS)

    Html篇: 1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE: trident内核 Firefox:gecko内核 Safari:webkit内核 Opera:以前是presto ...

  7. jqueryAPI使用之选择器

    好一段时间没有更新博文了.刚学习完JS基础知识后,也进入到了JQ的学习.为了能熟练掌握JQ的使用,最好的方法就是反复多练,讲JQ中的API的每个知识点都练习一遍.如果能做到这个,那么对JQ就没那么陌生 ...

  8. We refined export to Excel for SharePoint

    http://sysmagazine.com/posts/208948/ http://sharepointwikipedia.blogspot.kr/2013/05/export-to-spread ...

  9. IOS开发基础知识--碎片19

    1:键盘事件顺序 UIKeyboardWillShowNotification // 键盘显示之前 UIKeyboardDidShowNotification // 键盘显示完成后 UIKeyboar ...

  10. iOS NSString中的搜索方法rangeOfString

    NSString *str = @"your://aaa?backscheme=my"; //在str中查找“backscheme=”,并返回一个NSRange类型的值,我们可以通 ...