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

🌈个人主页: Aileen_0v0
🔥系列专栏:Java学习系列专栏
💫个人格言:”没有罗马,那就自己创造罗马~”

 

目录


继承

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”。

 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年12月5日
下一篇 2023年12月5日

相关推荐