个人主页: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;}@Overridepublic 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 {@Overridepublic void eat() {System.out.println("Dog is eating");}}
在上面的重写示例中,Dog 类继承自 Animal 类,重写了 eat() 方法。使用多态的方式创建了一个 Animal 类对象 animal,然后调用 eat() 方法,实际调用的是 Dog 类中重写的 eat() 方法,输出 “Dog is eating”。