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

  当我们创建一个对象的时候,所执行的构造方法相当于初始化一个对象

  1. 先初始化父类再初始化子类
  2. 先执行初始化对象中的属性,再执行构造方法中的初始化

  

  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关键字做标识有“最终的”含义

  1. final修饰类,则该类不允许被继承
  2. final修饰方法,则该方法不允许被覆盖(重写)
  3. final修饰属性,则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)
  4. final修饰变量,则该变量的值只能赋一次值,即变为常量。
  • super关键字

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

  1. 访问父类的属性:super.属性
  2. 访问父类的方法:super.方法
  3. 子类的构造的过程中必须调用其父类的构造方法。
  4. 如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。
  5. 如果显式的调用构造方法(super();),必须在子类的构造方法的第一行。
  6. 如果子类构造方法中既没有显式调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。
  • Object类

  Object类是所有类的父类,如果一个类没有extend是关键字明确标识继承另外一个类,那么这个类默认继承Object类

  Object类中的方法,适合所有子类

  1. toString()方法:在Object类里定义toString()方法的时候返回对象的哈希code码(对象地址字符串),可以通过重写toString()方法表示出对象的属性
  2. 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]

  3. euqals():比较的是对象的引用是否指向同一块内存地址。一般情况下比较两个对象时比较他的值是否一致,所以要重写equals()
  4. 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—继承的更多相关文章

  1. Java继承与组合

    Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...

  2. JAVA继承时构造函数的问题

    今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...

  3. Java继承和接口

    接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...

  4. Java继承的初始化

    /** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...

  5. Java—继承、封装、抽象、多态

    类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...

  6. java继承关系中成员变量,构造方法,成员方法的关系

    Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...

  7. JAVA继承时this和super关键字

    JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...

  8. JAVA 继承中的this和super

    学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...

  9. java 继承、重载、重写与多态

    首先是java 继承.重载和重写的概念 继承: 继承的作用在于代码的复用.由于继承意味着父类的所有方法亦可在子类中使用,所以发给父类的消息亦可发给衍生类.如果Person类中有一个eat方法,那么St ...

  10. Java 继承中构造方法的执行顺序问题

    在Java中,如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器:如果显式创建了有参构造器则该类就不再有默认无参构造器. 在Java继承中,构造器并不能被继承,而是被显示或隐式调用. 1. ...

随机推荐

  1. pytorch实现depthwise convolution

    深度分离卷积是Xception这个模型中提出来的(不太确定,但肯定是它让这个概念为大众周知),具体来说分为两步,depthwise conv和pointwise conv,前者对输入特征图的每个通道进 ...

  2. SQL语句 ANSI_NULLS 值(ON|OFF)的含义

    官方说明: 1.当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行. 即 ...

  3. PHP常用设计模式汇总

    装饰模式: <?php abstract class Tile { abstract function getWealthFactor(); } class Plains extends Til ...

  4. jquery深入学习

    样式操作: addclass();  //指定添加css类 removeclass();//移除指定css类 hasclass()://判断存不存在 toggleclass();//切换css类名,有 ...

  5. sshd服务及系统文件传输

    一.sshd 简介 sshd= secure shell 可以通过网络在主机中开机shell的服务 客户端软件 sshd 连接方式: ssh username@ip          ##文本模式的链 ...

  6. 一个简单的基于MINI2440开发板的启动代码

    1. S3C2440大概的启动流程(NAND启动): ①设置CPU为SVC模式 ②关闭看门狗 ③屏蔽中断 ④关闭MMU ⑤初始化时钟 ⑥初始化内存(SDRAM) ⑦初始化栈指针(SP, R13) ⑧初 ...

  7. java——数组栈 ArrayStack

    栈的应用: undo操作-编辑器 系统调用栈-操作系统 括号匹配-编译器 以下是动态数组实现的数组栈: 定义动态数组: package Date_pacage; public class Array& ...

  8. TCP/IP协议中几个缩写词的含义 MSL、TTL和RTT 报文最大生存时间 跳数(即生存时间) cs往返时间 MSL要大于TTL知道为什么吗?

    MSL.TTL和RTT简介 1.MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃.因为 ...

  9. python spilt()函数的使用方法

    Python中的split()函数的用法 Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后 ...

  10. linux 安装dubbo+zookeeper

    dubbo+zookeeper 启动成功 注意:dubbo-admin-2.5.4 不支持java8