【JAVA杂货铺】一文带你走进面向对象编程|继承|重载|重写|期末复习系列 | (中4)

简介: 【JAVA杂货铺】一文带你走进面向对象编程|继承|重载|重写|期末复习系列 | (中4)



继承

package Inherit;
class Dog {
  public String name;
  public int age;
  public void barks() {
    System.out.println(name + "汪汪叫!");
  }
  public void eat() {
    System.out.println(name + "正在吃饭!");
  }
}
class Cat{
  public String name;
  public int age;
  public void eat() {
    System.out.println(name + "正在吃饭!");
  }
  public void CatchMouse() {
    System.out.println(name + "正在抓老鼠");
  }
}
public class Test{
  public static void main(String[] args) {
  }
}

对比狗和猫这两个类,我们会发现它们有共同的属性,name,age 和 eat.

我们可以把它们相同的抽离出来,放到同一个Animal类里面.

通过extends(继承)关键字,让子类继承父类

当子类继承父类之后,就会把属性和方法全部继承.

继承:就是抽取共性,从而达到代码的复用[重复使用]

package Inherit;
class Animal{
  public String name;
  public int age;
  public void eat() {
    System.out.println(name + "正在吃饭!");
  }
}
class Dog extends Animal{
  public void barks() {
    System.out.println(name + "汪汪叫!"+"年龄"+ age);
  }
}
class Cat extends Animal{
  public void CatchMouse() {
    System.out.println(name + "正在抓老鼠");
  }
}
public class Test{
  public static void main(String[] args) {
    Dog dog = new Dog();
    //属性继承
    dog.name = "旺财";
    dog.age = 10;
    dog.barks();
    //方法继承
    dog.eat();
  }
}

注意:

1.子类将父类中的成员变量或成员方法继承到子类中.

2.子类继承父类之后,必须要新添加自己特有的成员,体现它与父类的不同,否则没有必要进行继承.


私有成员变量在继承中的使用

注意:私有的成员 可以被继承 但是不能访问.

若想访问,我们可以通过 get和 set方法进行访问

代码如下:

package Inherit;
class Animal{
  private String name;
  public int age;
  public void eat() {
    System.out.println(name + "正在吃饭!");
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}
class Dog extends Animal{
  public void barks() {
    System.out.println(getName() + "汪汪叫!"+"年龄"+ age);
  }
}
class Cat extends Animal{
  public void CatchMouse() {
    System.out.println(getName() + "正在抓老鼠");
  }
}
public class Test{
  public static void main(String[] args) {
    Dog dog = new Dog();
    //属性继承
    dog.setName("旺财");
    dog.age = 10;
    dog.barks();
    //方法继承
    dog.eat();
    Cat cat = new Cat();
    //属性继承
    cat.setName("喵喵");
    cat.age = 10;
    cat.CatchMouse();
    //方法继承
    cat.eat();
  }
}


当子类和父类变量不重名时:

package Inherit;
/**
 * 子类和父类不存在同名变量时
 */
class Base{
  int a;
  int b;
}
public class Derived extends Base{
  int c;
  public void method(){
    a = 10;//来自父类
    b = 20;//来自父类
    c = 30;
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
  }
  public static void main(String[] args) {
    Derived derived = new Derived();
    derived.method();
  }
}

控制台运行结果:

当子类和父类重名时:

package Inherit;
/**
 * 子类和父类存在同名变量时
 */
class Base{
  int a;
  int b;
  public void methodA() {
    System.out.println("Base 中的methodA()");
  }
}
public class Derived extends Base{
  int a = 60;// 与父类成员 a 同名,类型相同 
  char b = 'o';//与父类成员 b 同名,不同类
  int c;
  public void methodB() {
    System.out.println("Derived 中的 methodB()方法");
  }
  public void methodC() {
    methodB();//访问子类自己的methodB()
        methodA();//访问父类继承的methodA()
//        methodD();//编译失败,在整个继承过程中没有发现方法
  }
  public void method(){
//    a = 10;//来自父类
    b = 20;//来自父类
    c = 30;
    System.out.println(super.a);
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
  }
  public static void main(String[] args) {
    Derived derived = new Derived();
    derived.method();

父类与子类重合,优先访问子类

控制台运行结果:


📝总结:

继承的含义:

抽取共性,通过子类继承(extends)父类,达到代码复用


toString方法的作用:

在JAVA中,toString()方法是Object类中的一个方法,它的作用返回一个表示对象的字符串。当我们需要将一个对象转换为字符串时,可以使用toString()方法

如果我们没有重写该方法,则默认返回对象的类名和哈希码。

下面是一个toString()方法的代码案例:

public class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    public static void main(String[] args) {
        Person person = new Person("Tom", 20);
        System.out.println(person.toString());
    }
}

在上面的代码中,我们定义了一个Person类,并重写了toString()方法,返回了一个包含name和age属性的字符串。在main方法中,我们创建了一个Person对象,并使用toString()方法将其转换为字符串并输出。


重写和重载的区别

JAVA官方语法文档链接🔗👉:The Java® Language Specification

通过ctrl + F 找到 overload重载

重写和重载都是面向对象程序设计中的概念,它们的作用都是实现多态。但是它们的含义和实现方式是不同的

重载(Overload):指的是在同一个类内部或者父子类之间方法名相同,但是参数列表不同(参数类型、参数个数、参数顺序返回值类型可以是相同的也可以不同。这样的方法就叫做重载方法。

编译器根据调用时传递的不同参数,来确定调用的具体方法。

重写(Override):是指子类重写父类方法,方法名、参数列表、返回值类型与父类相同。这时候子类中的方法会覆盖掉父类中的方法,实现多态

下面是一些示例代码:

重载:

public class OverloadExample {
    public int add(int a, int b) {
        return a + b;
    }
    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

重写:

public class OverrideExample {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.eat();
    }
}
class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
}
class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating");
    }
}

在上面的重写示例中,Dog 类继承自 Animal 类,重写了 eat() 方法。使用多态的方式创建了一个 Animal 类对象 animal,然后调用 eat() 方法,实际调用的是 Dog 类中重写的 eat() 方法,输出 "Dog is eating"。

目录
相关文章
|
4月前
|
Java 编译器 数据安全/隐私保护
Java 大学期末考试真题与答案 含知识点总结 重难点归纳及题库汇总 Java 期末备考资料
本文汇总了Java大学期末考试相关资料,包含真题与答案、知识点总结、重难点归纳及题库,涵盖Java基础、面向对象编程、异常处理、IO流等内容,并提供完整代码示例与技术方案,助你高效复习备考。
252 3
|
4月前
|
安全 Java 测试技术
Java 大学期末实操项目在线图书管理系统开发实例及关键技术解析实操项目
本项目基于Spring Boot 3.0与Java 17,实现在线图书管理系统,涵盖CRUD操作、RESTful API、安全认证及单元测试,助力学生掌握现代Java开发核心技能。
237 0
|
8月前
|
开发框架 算法 Java
Java方法重写(Override)与重载(Overload)的详细对比
在Java编程中,多态性是面向对象编程的核心概念之一。Java通过两种重要的机制来实现多态:方法重写(Override)和方法重载(Overload)。虽然这两个概念都与方法的不同实现有关,但它们在本质上有很大的区别。本文将详细对比这两种机制,帮助开发者更好地理解和应用它们。
722 5
|
7月前
|
Java 编译器 程序员
java中重载和多态的区别
本文详细解析了面向对象编程中多态与重载的概念及其关系。多态是OOP的核心,分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态主要通过方法重载和运算符重载实现,如Java中的同名方法因参数不同而区分;运行时多态则依赖继承和方法重写,通过父类引用调用子类方法实现。重载是多态的一种形式,专注于方法签名的多样性,提升代码可读性。两者结合增强了程序灵活性与扩展性,帮助开发者更好地实现代码复用。
310 0
|
10月前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
534 15
|
Java 编译器
Java的重载与重写的区别
Java的重载与重写的区别
166 0
|
Java 编译器
【面试题精讲】Java重载和重写有什么区别?
【面试题精讲】Java重载和重写有什么区别?