🌈个人主页: Aileen_0v0
🔥系列专栏:Java学习系列专栏
💫个人格言:"没有罗马,那就自己创造罗马~"
目录
继承
私有成员变量在继承中的使用编辑
当子类和父类变量不重名时:
当子类和父类重名时:
📝总结:
继承的含义:
toString方法的作用:
重写和重载的区别
继承
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"。