Java的类继承

知识点
1、继承
作用:提高代码的重用性,继承之后子类可以继承父类中的属性和方法
减少重复代码
条件:子类和父类要满足is a的逻辑关系,才能使用继承。
如:苹果 is a水果
语法:使用extends 连接子类和父类。子类 extends 父类
Java是单继承,一个类只能继承一个父类。
子类不能继承父类私有的属性,但是可以继承父类属性的GET/SET方法
super关键字:代表父类对象,可以调用父类的属性,父类的方法,
子类对象在创建的时候,默认调用父类的无参构造方法。

二、abstract关键字 抽象
abstract可以修饰类和方法
1.抽象类
不能被实例化
2.abstract也可用于方法——抽象方法
抽象方法没有方法体
抽象方法必须在抽象类里
抽象方法必须在子类中被实现,除非子类是抽象类

对应验证访问修饰符总结的代码:

NUM.1 同包验证:

11 package a; 22 public class A { 33 private String a="1"; 44 String b="2"; 55 protected String c="3"; 66 public String d="4"; 77 } 8 91 package a; 102 public class B { 113 public static void main(String[]args){ 124 A a=new A(); 135 System.out.println(a.b);//可以调用除用private修饰的之外所有的变量 146 } 157 }

NUM.2 不同包验证:

1 1 package b; 2 2 /** 3 3 * 在这里要先进行导包,如果不这样, 4 4 * 下面要想new A()就不行,new c()的意义在于建立一个子类方法, 5 5 * 从而观察经private修饰过后的变量是否能在其子类中调用 6 6 */ 7 7 import a.A; 8 8 public class C extends A{ 9 9 public static void main(String[]args){ 1010 A a=new A(); 1111 C c=new C(); 1212 //c作为子类是可以调用以private访问修饰符修饰的c 1313 //以及用public修饰的d 1414 System.out.println(c.c); 1515 System.out.println(c.d); 1616 //而a作为new的父类,则因在不同包的原因而只能调用public修饰的d 1717 System.out.println(a.d); 1818 } 1919 }

写到这里,我突然想到java默认的调用方法是用无参的方法,如果有在调用时设定了参数就会使用有参构造方法,

此时不由想到父类和子类的代码块调用,于是我设计了以下代码去进行测试

1 1 package day20190227; 2 2 public class Pet { 3 3 private String name; 4 4 private int health; 5 5 private int love; 6 6 public Pet(){ 7 7 System.out.println("父类的无参构造方法调用"); 8 8 } 9 9 public Pet(String name,int health,int love){ 1010 System.out.println("父类的有参构造方法调用"); 1111 this.name=name; 1212 this.health=health; 1313 this.love=love; 1414 } 1515 public String getName() { 1616 return name; 1717 } 1818 public void setName(String name) { 1919 this.name = name; 2020 } 2121 public int getHealth() { 2222 return health; 2323 } 2424 public void setHealth(int health) { 2525 this.health = health; 2626 } 2727 public int getLove() { 2828 return love; 2929 } 3030 public void setLove(int love) { 3131 this.love = love; 3232 } 3333 //输出宠物信息 3434 public String printInfo(){ 3535 return "我的名字叫"+name+",健康值为"+health+",亲密度为"+love; 3636 } 3737 } 38 39 1 package day20190227; 40 2 /** 41 3 * 狗类,继承Pet类 42 4 * @author Administrator 43 5 * 44 6 */ 45 7 public class Dog extends Pet { 46 8 private String strain; 47 9 public Dog(){ 4810 System.out.println("狗类无参构造方法调用"); 4911 } 5012 public Dog(String name,int health,int love,String strain) { 5113 //super.printInfo();调用父类的方法 5214 //super.name;调用父类的属性 5315 super(name,health,love);//调用父类构造方法,必须在第一行 5416 System.out.println("狗类有参构造方法调用"); 5517 this.strain = strain; 5618 } 5719 public String getStrain() { 5820 return strain; 5921 } 6022 public void setStrain(String strain) { 6123 this.strain = strain; 6224 } 6325 }

在设定好父类和子类的无参构造方法和有参构造方法后,我在其中分别加入了一段说明语句,而后再重新编辑了一个TestDogCon类用于测试;

1 1 package day20190227; 2 2 /** 3 3 * 有参&无参调用测试 4 4 * @author Administrator 5 5 * 6 6 */ 7 7 public class TestDogCon { 8 8 public static void main(String[] args) { 9 9 Dog dog=new Dog("小华",90,90,"拉布拉多犬"); 1010 } 1111 }

经测试发现当dog设定了数据时,显示的都是

而当将new Dog()中的数据删去后,显示的则是

**总结:**在创建子类的对象时,Java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法。

在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确的初始化。

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章带你搞懂Python中的继承和多态

一、继承的介绍继承是一种创建新的类的方式,新创建的叫子类,继承的叫父类、超类、基类。继承的特点就是子类可以使用父类的属性(特征、技能)。继承是类与类之间的关系。继承可以减少代码冗余、提高重用性。在现实生活中,继承一般指的是子女继承父辈的财产,如下图:二、如何用继承?1.继承语法Class派生类名(基类名):基类名写在括号里。在继承关系中,已有的,设计好

你不可不知的JS面试题(第二期)

1、什么是继承?子类可以使用父类的所有功能,并且对功能进行扩展。新增方法改用方法(1)、ES6使用extends子类继承父类的方法。// 父类    class A        constructor(name)            this.name name;                getNa

Python Day24:类的继承、派生、覆盖、super()、绑定、非绑定方法

类的继承、派生、覆盖、super()python类的继承:子类继承父类,只需要在定义类的时候在类名后面加上(父类名)。继承之后,父类的属性方法、子类都可以访问派生:子类继承父类后,自己在父类的基础上,又添加了一些属于自己特性的属性、方法

Java基础学习总结(7)——Object类

一、Object类介绍  Object类在JAVA里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能有一个,JAVA为了组织这个类组织得比较方便,它提供了一个最根上的类,相当于所有的类都是从这个类继承,这个类就叫Object。所以

Java高级类特性(一)

一、继承性!(https://oscimg.oschina.net/oscnet/4da087cd3fa07b567f305a479b4035e99b8.png)1)继承的使用:权限修饰符classAextendsB{};2)子类:A父类(基类SuperClass):B3)子类继承父类后,父类中声明的属性、方法,子