Java学习----继承

本文详细介绍了Java中的继承概念,包括代码复用、类的扩展、单根性和传递性。讲解了Java中单继承与接口的多继承特性,并展示了如何通过子类继承父类实现代码重写。同时,讨论了instanceof运算符、final关键字的作用,以及Object类的基本特性。文章还涵盖了重写、equals方法和hashCode方法的使用,以及super关键字的应用。最后,通过实例代码加深了对这些概念的理解。
摘要由CSDN通过智能技术生成

继承

继承是面向对象编程的三大特征之一。继承让我们更加容易实现类的扩展。实现代码的 重用,不用再重新发明轮子(don’t reinvent wheels)。
 

继承的主要作用:

  1. 代码复用,更容易实现类的扩展
  2. 方便建模

继承的俩个特性:

  1. 单根性:一个子类只能有一个直接的父类
  2. 传递性:A类的非私有属性或方法可以传递给子类B,再传递给子类C

 Java中类是单继承的,接口是多继承的

子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见 得可以直接访问(比如,父类私有的属性和方法)。

如果定义一个类时,没有调用 extends,则它的父类是:java.lang.Object。

在Java中,使用extends关键字来实现子类继承父类。例如:动物是哺乳动物和爬行动物的父类。

package com.bjsxt.inherit;

public final class animal {
    public static void main(String[] args) {
        Taidi t=new Taidi();
        t.dog.shout();
        t.dog.height=101;
    }
}
/*final*/ class Dog{
    int height;

    public void shout(){
        System.out.println("你在狗叫什么");
    }
}

class Taidi extends Dog{
        Dog dog=new Dog();
}

instanceof运算符

instanceof 是二元运算符,左边是对象,右边是类;当对象是右面类或子类所创建对 象时,返回 true;否则,返回 false。

final关键字 

修饰变量:被他修饰的变量不可改变。一旦赋了初值,就不能被重写赋值。

修饰方法:该方法不可被子类重写,但是可以被重载。

修饰类:修饰 的类不能被继承。

Object类基本特性

1.Object类是所有类的父类,所有的Java对象都拥有Object类的属性和方法。

2.如果在类的声明中未使用extends,则默认继承Object类。

toString方法

toString ()方法:输出内容是一个字符串,即完整的包名+类名+@+十六进制的哈希码值

Object 类中定义有 public String toString()方法,其返回值是 String 类型。Object 类中 toString 方法的源码为:

 对上述代码实现:

package com.bjsxt.inherit;

import java.util.DoubleSummaryStatistics;

public class Person extends  Object{
    String name;
    int height;

    public void rest(){
        System.out.println("休息!");
    }

    public Person getFriends(){
        return new Person();
    }

    public String toString(){
        return "名字是"+name+",身高,"+height;

    }

    public static void main(String[] args) {
        Student s=new Student("张三",180,90);
        System.out.println(s instanceof  Person );
        s.rest();
        System.out.println(s.toString());
    }
}

class  Student extends Person{
   int score;

   public void study(){
       System.out.println("学习"+name);

   }

   public void rest(){
       System.out.println("回宿舍睡会!");
   }
   Student(String name,int height,int score){
     this.score=score;
     this.name=name;
     this.height=height;
   }
}
class Employee extends Person{
    public void rest()
    {
        System.out.println("办公区休息");
    }}

    class Teacher{
    int teacherId;
    Person person=new Person();

    Teacher(int TeacherId,String name,int height){
        this.teacherId=teacherId;

    }
    }

方式重写 override

子类重写父类的方法,可以用自身行为替换父类行为。重写是实现多态的必要条件。

方式重写需要符合下面的三个要点:

  1. “==”:方法名、形参列表相同。
  2. “<=”:返回值类型和声明异常类型,子类小于等于父类。
  3. “>=”:访问权限,子类大于父类。

equals方法

equals() 提供定义“对象内容相等”的逻辑。比如,我们在公安系统中认为 id 相同的 人就是同一个人、学籍系统中认为学号相同的人就是同一个人。

equals()默认是比较两个对象的 hashcode。但可以根据自己的要求重写 equals 方法。

上述方法实现:

package com.bjsxt.inherit;

import java.util.Objects;

public class User {
    int id;
    String name;
    String pwd;

    User (int id,String name,String pwd){
        this.id=id;
        this.name=name;
        this.pwd=pwd;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return id == user.id &&
                Objects.equals(name, user.name) &&
                Objects.equals(pwd, user.pwd);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, pwd);
    }

    public static void main(String[] args) {
        User u1=new User(1001,"WJH","123321");
        User u2=new User(1002,"wjh","123321");

        System.out.println(u1);
        System.out.println(u2.toString());

        System.out.println(u1==u2);//== 判断是不是同一个对象
        System.out.println(u1.equals(u2));
    }
}

super关键字

super在Java中指代父类,只能出现在子类中。

作用:

  1. 访问父类的非私有属性,其调用格式: super.属性名;
  2. 访问父类的非私有方法,其调用格式为:super.方法名;

super“可以看做”是直接父类对象的引用。可通过 super 来访问父类中被子类覆盖的 方法或属性。

代码实操:

package com.bjsxt.text;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import org.w3c.dom.ls.LSOutput;

public class Text1 {
    public static void main(String[] args) {
        System.out.println("开始创造一个ChildClass对象....");
        new ChildClass2();



    }
}class FatherClass1{
    public FatherClass1(){
        System.out.println("创建FatherClass");

    }
    FatherClass1(int a){

    }
}

class ChildClass2 extends FatherClass1{
    public ChildClass2(){
        super(3);
        System.out.println("创建Child Class");
    }
}

 IDAE快捷键

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值