Java--继承1
想分享一下我学到的关于继承的知识:
此时我有两个类,类名1:Cat 类名2:Dog
public class Cat {
public int age;
public String name;
public void ear(){
System.out.println(this.name+"正在吃猫粮");
}
}
public class Dog {
public int age;
public String name;
public void eat(){
System.out.println(this.name+"正在吃狗粮");
}
}
要向描述一只猫的话,这只猫肯定有名字和年龄吧?同样的,描述一只狗,这只狗也有名字和年龄
但如果有十只,十几只动物呢?难道我要在这么多类里都写上 public int age和public String name吗?这个时候,就能体现出Java牛福之处了,在Java中,有继承这一说法
继承是什么?有什么用?怎么继承?
一、介绍继承
1.在继承中,有两种类,父类(基类/超类)和子类(派生类),我们可以提取出这一堆子类中的共同点,放到父类里,保留子类的特殊独有代码,等子类继承父类里的东西后,就相当于子类里有了父类里的代码。
接下来,我们按一中说的,删去猫类和狗类中共有的代码,只保留各自的特殊代码
public class Cat {
public void eat(){
System.out.println(this.name+"正在吃猫粮");
}
}
public class Dog {
public void eat(){
System.out.println(this.name+"正在吃狗粮");
}
}
随后,我们创造父类,都是动物的话吗,我们可以将父类定义为Animal
public class Animal {
public int age;
public String name;
}
这两行就是猫类和狗类中共有的代码,接下来就是如何继承,非常简单
语法:子类名 + extends + 父类名
实例:
public class Cat extends Animal{
}
public class Dog extends Animal{
}
这样,我们就成功继承了父类,接下来测试父类的代码是否成功继承给了子类
public class Dog extends Animal{
public void eat(){
System.out.println(this.name+"正在吃狗粮");
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.age = 100;
System.out.println(dog.age);
}
}
可以看到,Dog这个类里,没有age这个成员变量,但我们在main方法里不仅通过dog这个引用访问到了age,还对其进行了修改并访问,此时子类成功继承了父类里的代码
2.继承的作用
通过上面的例子可以看到,继承让我们在敲代码的时候做到的省时省力,做到了代码的复性使用,这就是继承的好处
二、super
跟this很像,用于指向父类的成员
上实例:
public class Animal {
public int age=100;
public String name;
}
public class Dog extends Animal{
public int age = 10000;
public void func1(){
System.out.println(age);
}
public void eat(){
System.out.println(this.name+"正在吃狗粮");
}
}
此时,在Dog中有个age变量值为10000,而父类当中的age变量值为100
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.func1();//打印结果为子类的age,10000
}
}
那么我在main方法中访问这个age,打印结果是子类的10000,还是父类的100呢
打印结果为子类的10000
为什么呢?原因是因为func1方法中的这一行
System.out.println(age);
其实一直有个隐藏的this,所以这一行其实长这样
System.out.println(this.age);
这个this指向的当然是子类的age变量而非父类,所以打印结果为子类的age
如果我们要打印父类的age,该怎么办呢?这个时候就体现出了super的作用了
前面说过super和this其实很像,所以用法也是一样的,super + "."后加变量或方法,当然,加的要是非静态的
所以我们把func1改成这样就可以成功访问到父类的age了
public void func1(){
System.out.println(super.age);
}
父类和子类同时出现age,这种现象叫做重写,不仅是变量,方法也有重写
public class Animal {
public int age=100;
public String name;
public void test1(){
System.out.println("父类的test1");
}
}
public class Dog extends Animal{
public void test1(){
System.out.println("子类的test1");
}
public void eat(){
System.out.println(this.name+"正在吃狗粮");
}
}
可以看到父类和子类都有test1方法,那么跟变量一样,main方法中若访问test1方法,则优先访问子类的test1,同理,如果我们想要访问父类中的test1方法,可以用super.test1
public void test1(){
System.out.println("子类的test1");
super.test1();
}
这样我们就成功的在main方法中访问到了父类的重写方法
更多推荐




所有评论(0)