【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"。

目录
相关文章
|
16天前
|
Java
Java中的继承和多态是什么?请举例说明。
Java中,继承让子类继承父类属性和方法,如`class Child extends Parent`,子类可重写父类方法。多态允许父类引用指向子类对象,如`Animal a = new Dog()`,调用`a.makeSound()`会根据实际对象类型动态绑定相应实现,增强了代码灵活性和可扩展性。
10 0
|
23天前
|
安全 Java 数据安全/隐私保护
|
23天前
|
搜索推荐 Java
Java的面向对象特性主要包括封装、继承和多态
【4月更文挑战第5天】Java的面向对象特性主要包括封装、继承和多态
15 3
|
3天前
|
安全 Java
Java基础&面向对象&继承&抽象类
Java基础&面向对象&继承&抽象类
|
3天前
|
Java
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
8 0
|
1月前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
94 3
|
1月前
|
Java
【Java】重写compareTo()方法给对象数组排序
【Java】重写compareTo()方法给对象数组排序
12 0
|
1月前
|
Java
java中的继承
java中的继承
10 1
|
1月前
|
Java
Java类的继承
Java类的继承
8 0
|
1月前
|
Java
Java面向对象编程
Java面向对象编程