Java笔记(五)

目录

继承

继承的使用要点

组合

方法的重写

final关键字

instanceof运算符


继承

一个人的属性有名字,身高。学生也是人,但学生拥有其特殊的属性,如专业。当定义学生类时,名字,身高等人拥有的属性学生都需要写上去,这时候会重复很多代码,使用继承即可将Person类的属性与方法继承给Student类,此时Student类只要写自己特有的代码即可。

子类继承父类的属性与方法,不继承构造器,此类方法可以避免代码的重复,使得代码更加简洁,关系更清晰。(子类的名字 extends 父类的名字即可实现继承功能)

如下,student类是Person的子类。

class Person{
   String name;
   int height;
   public void rest(){
          System.out.println("休息一会儿!");
   }
}


class student extends Person{
     String major;
     public void study(){
        System.out.println("正在学习Java");
     }

继承的使用要点

  • 父类也称作超类,基类。子类也可以叫做派生类等。
  • Java中只有单继承(一个子类只能有一个父类,但是一个父类可以有许多子类),没有像c++那样的多继承、多继承会引起混乱,使得继承链过于复杂,系统难以维护。
  • Java中类没有多继承,接口有多继承。
  • 子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)
  • 如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。

组合

组合也能实现继承所能实现的功能。组合的核心是将父类对象作为子类的属性,子类通过调用这个属性来获得父类的属性和方法。(如果A类具有B类的所有属性与方法,那么就在A类里面new一个B类的对象,则即可用A类的对象调用B类的对象,即可调用B类的属性。)

pubic class Test{
   public static void main(Srting[] args){
      Student s = new Student("朴彩英",170,"Java");
      s.person.rest();
      s.study();
   }
}


class Person{
   String name;
   int height;
   public void rest(){
      System.out.println("休息一会儿");
   }
}

class Student {
   Person person = new Person();//实现了Student类与Person类的组合
   String major;
     public Student(String name,int heignt,String major){
        this.person.name=name;
        this.person.height=height;
        this.major=major;
     }
}

方法的重写

方法重写的前提是必须存在继承关系,在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。重写的方法,可以用不同的对象来区分调用的是哪一个方法。

注意:

  1. 父类的成员方法只能被它的子类重写。
  2.  声明为 final 的方法不能被重写。 声明为 static 的方法不能被重写,但是能够再次声明。
  3. 构造方法不能被重写。
  4. 子类和父类在同一个包中时,子类可以重写父类的所有方法,除了声明为 private 和 final 的方法。
  5. 子类和父类不在同一个包中时,子类只能重写父类的声明为 public 和 protected 的非 final 方法。

方法的重写需要满足以下三个条件

  1. “==”:方法名,形参名相同。
  2. “<=”:返回值类型和声明异常类型,子类小于父类。
  3. “>=”:访问权限,子类大于等于父类。(访问权限由小到大:private——>default——>protected——>public)

如下代码,在父类 Animal 中定义 getInfo() 方法,并在子类 Cat 中重写该方法.

public class Animal {
    public String name; // 名字
    public int age; // 年龄

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getInfo() {
        return "我叫" + name + ",今年" + age + "岁了。";
    }
}



public class Cat extends Animal {
    private String hobby;

    public Cat(String name, int age, String hobby) {
        super(name, age);
        this.hobby = hobby;
    }

    public String getInfo() {
        return "喵!大家好!我叫" + this.name + ",我今年" + this.age + "岁了,我爱吃" + hobby + "。";
    }

}

final关键字

final关键字的作用

  1. 修饰变量:被它修饰的变量不可改变,一旦赋了初值,就不能被重新赋值,                             如:final int MAX-SPEED=120;
  2. 修饰方法:该方法不可被子类重写,但是可以被重载!                                                             如:public final void study{}
  3. 修饰类:修饰的类不能被继承,比如:Math,String等。                                                     如:final class A{}

instanceof运算符

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

public class Test{
     public static void main(String[] args){
       Student s = new Student("朴彩英",170,"java");//此处假设Student为Person的子类。
       System.out.println(s instanceof Person);
       System.out.println(s instanceof Student);
     }
}

 他们的返回值都为true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笃岩_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值