一、继承

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()是得到类对象、

Java学习笔记(九)——继承的更多相关文章

  1. 1.8(java学习笔记)继承与方法的重写

    继承 在java中可以通过继承提高代码的复用率. 例如A继承了B,就可以是 例如,首先有一个类似Person,这个类中有有一些属性和方法,我们再新建一个Student类,其中有一部分属性和方法与Per ...

  2. Java 学习笔记(6)——继承

    之前说过了Java中面向对象的第一个特征--封装,这篇来讲它的第二个特征--继承.一般在程序设计中,继承是为了减少重复代码. 继承的基本介绍 public class Child extends Pa ...

  3. Java学习笔记之继承

    一.继承的基础 在Java术语中,被继承的类叫超类(superclass)或者父类,继承超类的类叫子类(subclass). 举例说明: class Box { public double width ...

  4. Java学习笔记之——继承

    父类(基类):动物 子类:猫.狗.狼.老虎 如果子类继承于父类,则会自动拥有父类的所有非私有属性和方法,不会继承构造方法 父类和子类要满足一种关系:子类是父类的一种 Java中只支持单继承:一个子类只 ...

  5. java学习笔记1——继承

    通过在类的声明中加入extends子句创建一个子类并继承父类的成员变量和方法.如: class SubClass extends SuperClass{ ... } 若SuperClass是另一个类的 ...

  6. 0022 Java学习笔记-面向对象-继承、多态、组合

    继承的特点 单继承:每个子类最多只有一个直接父类,注意是直接父类,间接父类个数不限 注意父类的概念:A-->B-->C-->D,在这里,ABC都是D的父类,C是D的直接父类,AB是D ...

  7. Java学习笔记九(泛型)

    1.介绍 所谓的泛型就是将类型作为一种參数来传递.有了泛型后类型不再是一成不变的.能够通过泛型參数来指定. 能够提供程序开发的灵活性. 2.泛型类或接口的使用 泛型类声明时.与普通类没有太大的差别,仅 ...

  8. Java学习笔记九:Java的循环跳转语句

    Java的循环跳转语句 一:Java循环跳转语句之break: 生活中,我们经常会因为某些原因中断既定的任务安排.如在参加 10000 米长跑时,才跑了 500 米就由于体力不支,需要退出比赛.在 J ...

  9. Java学习笔记九

    GUI:图形用户界面,Java不常用于创建桌面应用,所以用的比较少 一.概述: 二.Frame演示: 三.事件监听机制 import java.awt.Button; import java.awt. ...

  10. Java学习笔记(九)面向对象---模板方法设计模式

    理解 在定义功能时功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么就将不确定的部分暴露出去,由该类的子类完成. 举例 需求 获取一段程序的运行时间 代码 abstra ...

随机推荐

  1. CentOS卸载OpenJDK并安装Sun JDK

    第一步:查看Linux自带的JDK是否已安装 (卸载centOS已安装的1.4) 安装好的CentOS会自带OpenJdk,用命令 java -version ,会有下面的信息: java versi ...

  2. Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试

    最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...

  3. “假学习“&”真学习“?(摘)

    什么叫做“假学习”? 一.看书 买一堆书,有空看看.看书,这是典型的假学习.看书看不懂还在看,就是假学习,欺骗自己,安慰自己正在学习而已.专业书都写得很好,但大都是写给已经懂的人看的.看书的最大作用就 ...

  4. suse linux 命令

    1.修改vftpd配置文件   vi /etc/vsftpd .conf                       #listen=YES   vi /etc/xinetd.d/vsftpd     ...

  5. IOS-Gesture(手势识别)

    手势识别——Gesture Recognizer •iOS3.2版本之后,苹果推出了手势识别(Gesture Recognizer),其目的是: –简化开发者的开发难度 –统一用户体验 • •iOS目 ...

  6. mvn命令备忘

    转换成eclipse项目mvn eclipse:eclipse 跳过testmvn install -Dmaven.test.skip=true mvn clean install -DskipTes ...

  7. python基础——第三方模块

    python基础——第三方模块 在Python中,安装第三方模块,是通过包管理工具pip完成的.  如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了.  如果你正在使用Window ...

  8. merge

    当两个DataFrame相加的时候,如果,其中一个不全则会相加产生NA,所以必须一次性将数据的索引索引确定下来,然后对所有数据重建索引然后,填充0,再相加.否则有数据的和没数据的相加结果都变为了NA, ...

  9. 2 配置Ionic开发环境以及创建新的项目

    1.开发环境需要的软件有: node.js http://nodejs.org  可以到官方网站下载对应平台的安装包安装即可,如果已经安装,需要把它升级到最新的稳定版本   在终端可以输入$node ...

  10. JS中级 - 01:DOM节点

    1元素属性   1.1childNodes 返回元素的一个子节点的数组 (不推荐,建议用非标准children代替) 提醒:只包含一级子节点,不包含后辈孙级别以下节点. children:返回元素的一 ...