Java—继承

  • 继承
  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(),运行结果是:[email protected];如果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;
        }
    }

    如果运算符“==”两侧是引用类型数据,比较的并不是“值”本身,而是在内存的地址。

时间: 2024-12-20 14:57:25

Java—继承的相关文章

java继承和多态

java方法直接调用原理推测 有错误还望指正 当直接调用某对象的某方法时  会更具该对象获取到类信息对象   在从类信息对象中找到该方法 没找到 获取父类信息对象继续查找 找到了执行  jdk距离实现是通过反射还是其它? 如果按以上原理    以下情况解释不通 创建一子类对象  赋值给一父类指针变量  通过父类指针变量掉run方法   run方法在父类或子类中为私有  这种情况调用的是父类的run方法 并非子类的run方法 反射jar包 package extend; import org.ju

Java继承,多态,组合应用

继承:  面向对象的三大特征之一:    是类和类之间的一种拓展关系,是一种从一般到特殊的关系;    格式: sub   extends Super,  我们把sub称为子类或者拓展类, 把super称为父类或者基类(超类)   泛化: 把子类中的共性抽取到父类的过程; 特化: 子类在父类的基础之上,拓展自己特有的状态和特征;    Object: 是所有类的直接父类后间接父类;      class  Student{} 等价于  class  Student extends Object{

Java继承

public class Employee { public static String superStr = "SUPERSTR"; public String test() { return "SUPERTEST"; } public String test2() { return "SUPERTEST2"; } } public class Manager extends Employee { public static void main

Java继承改进

一.java继承改进 首先,多继承的缺点: 1.继承多个父类,父类中方法名相同,产生歧义 2.父类中方法同名,子类未覆盖,也会歧义 所以,java改进,类只能单继承,接口可以多继承 接口中只有抽象方法和静态常量 1.抽象方法只能在实现接口类中实现,调用时调用实现类的方法 2.静态变量在编译期间将确定调用关系了,存在冲突也会在编译的时候提示错误 ,而且引用变量一般直接使用类名或接口名,避免产生歧义. 1.1继承的初始化 继承关系是传递的.如,类C继承类B,类B继承类A,则类C既有从类B继承下来的变

Core Java (十一) Java 继承,类,超类和子类

Core Java (十一) Java 继承,类,超类和子类 标签: javaJavaJAVA 2013-01-22 17:08 1274人阅读 评论(0) 收藏 举报  分类: java(58) 读书笔记(46)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 继承关系 两个类之间存在三种关系: 依赖,uses-a,如果一个类的方法操纵另一个对象,我们就说一个类依赖于另一个类. 聚合(关联),has-a,一个对象包含另外一个对象,聚合关系意味着类A的对象包含类B的对象

JAVA继承时构造函数的问题

今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan { protected int a=4; //构造函数1 Jisuan() { System.out.println("父类的无参数构造函数"); } //构造函数2 Jisuan(int a) { System.out.println("父类的有参数构造函数");

java继承会犯的小错误

注意事项:阅读本文前应该先了解java的继承.本文定位为已经继承基础知识. 一:试图覆盖私有方法 先上代码 1 public class Father { 2 3 private void print() { 4 System.out.println("private print"); 5 } 6 7 public static void main(String[] args) { 8 Father father = new Son(); 9 father.print(); 10 }

java继承时候类的运行顺序问题

子类在继承父类后,创建子类对象会首先调用父类的构造函数,先运行父类的构造函数,然后再运行子类的构造函数,例如以下所看到的: class Father{ public Father(){ System.out.println("I am father"); } } public class Child extends Father{ public Child(){ System.out.println("I am child"); } public static vo

Java 继承中的构造方法

Java 继承中的构造方法 子类可以继承父类的构造方法,并遵循以下原则: 子类构造的构成中必须调用其基类的构造方法.    2.子类可以在自己的构造方法中使用super()调用基类的构造方法. 使用this()调用本类的另外的构造方法. 如果调用super(),必须写在子类构造方法的第一行. 3.如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参的构造方法.    4.如果子类的构造方法中既没有显示的调用基类的构造方法,而基类中又没有无参的构造方法,则编译会出错. 1 cla

Java继承篇总结

继承: 1)概念 把多个类中相同的成员给提取出来定义到一个独立的类中.然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容.这个关系叫继承. 1.1)定义类时,通过"继承"一个现有的类,子类可以具有父类中的所有属性和方法. 2)Java中如何表示继承呢?格式是什么呢? A:用关键字extends表示 B:格式: class 子类名 extends 父类名 {} 2.1)案例 public class Animal { String name; String color; p