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

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

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

NUM.1 同包验证:

 package a;
public class A {
private String a="1";
String b="2";
protected String c="3";
public String d="4";
}
 package a;
public class B {
public static void main(String[]args){
A a=new A();
System.out.println(a.b);//可以调用除用private修饰的之外所有的变量
}
}

NUM.2 不同包验证:

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

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

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

 package day20190227;
public class Pet {
private String name;
private int health;
private int love;
public Pet(){
System.out.println("父类的无参构造方法调用");
}
public Pet(String name,int health,int love){
System.out.println("父类的有参构造方法调用");
this.name=name;
this.health=health;
this.love=love;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
//输出宠物信息
public String printInfo(){
return "我的名字叫"+name+",健康值为"+health+",亲密度为"+love;
}
}
 package day20190227;
/**
* 狗类,继承Pet类
* @author Administrator
*
*/
public class Dog extends Pet {
private String strain;
public Dog(){
System.out.println("狗类无参构造方法调用");
}
public Dog(String name,int health,int love,String strain) {
//super.printInfo();调用父类的方法
//super.name;调用父类的属性
super(name,health,love);//调用父类构造方法,必须在第一行
System.out.println("狗类有参构造方法调用");
this.strain = strain;
}
public String getStrain() {
return strain;
}
public void setStrain(String strain) {
this.strain = strain;
}
}

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

 package day20190227;
/**
* 有参&无参调用测试
* @author Administrator
*
*/
public class TestDogCon {
public static void main(String[] args) {
Dog dog=new Dog("小华",90,90,"拉布拉多犬");
}
}

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

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

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

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

Java的类继承的更多相关文章

  1. java一个类 继承HttpServlet 和实现Servlet区别

    java一个类 继承HttpServlet 和实现Servlet区别 servlet 是一个接口,如果实现这个接口,那么就必须实现接口里面定义的所有方法 而HttpServlet实现了servlet接 ...

  2. java的类继承(与c++对比)

    1. interface的引入 使用interface来定义某一类通用操作,而又不强制规定其实现,对于Java的流行真是太重要了. 以JDBC举例.在Java之前,C++与数据库建立连接,常用的一个技 ...

  3. 【JAVA】类继承对父类静态变量的操作

    对静态变量的操作存在继承时还是有一些模糊,做了个简单的测试: class Test { private String mName; public Test(String name) { setName ...

  4. java基础 类 & 继承

    类 在Java中,类文件是以.java为后缀的代码文件,在每个类文件中可以有多个类,但是最多只允许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在 ...

  5. C++ 和 Java 对类继承的差异

    #include <iostream> using namespace std; class Base { public: int i; Base() { i = ; fun(); } v ...

  6. Java: 类继承中 super关键字

    super 关键字的作用有两个: 1)在子类中调用超类的构造器,完成实例域参数的初始化,调用构造器的语句只能作为另一个构造器(通常指的是子类构造器)的第一条语句出现, 2)在子类中调用超类的方法,如: ...

  7. (转)Java:类与继承

    原文地址: http://www.cnblogs.com/dolphin0520/p/3803432.html 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大 ...

  8. Java:类与继承

    Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知 ...

  9. Java:验证在类继承过程中equals()、 hashcode()、toString()方法的使用

    以下通过实际例子对类创建过程汇中常用的equals().hashcode().toString()方法进行展示,三个方法的创建过程具有通用性,在项目中可直接改写. //通过超类Employee和其子类 ...

随机推荐

  1. winrar压缩过滤文件及文件夹

    代码: .git .git\* .svn .svn\* .git~\* .git~ build\* build vsout\* vsout *.obj *.sdf *.opensdf game目录: ...

  2. linux软链接的创建、删除和更新

    大家都知道,有的时候,我们为了省下空间,都会使用链接的方式来进行引用操作.同样的,在系统级别也有.在Windows系列中,我们称其为快捷方式,在Linux中我们称其为链接(基本上都差不多了,其中可能有 ...

  3. L - Father Christmas flymouse

    来源poj3160 After retirement as contestant from WHU ACM Team, flymouse volunteered to do the odds and ...

  4. Java课程寒假之开发记账本软件(网页版)之三

    一.实现基础功能之一(查询)(补) 在上一篇中解释的不够详细,在本篇中补充一下指定日期查询,其实和查询没有什么区别,就是设置select下拉框来对于日期的起始与结束日期,然后就是一个简单的mysql语 ...

  5. Nestjs 链接mysql

    文档 下插件 λ yarn add @nestjs/typeorm typeorm mysql 创建 cats模块, 控制器,service λ nest g mo cats λ nest g co ...

  6. Gym 101981K - Kangaroo Puzzle - [玄学][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem K]

    题目链接:http://codeforces.com/gym/101981/problem/K Your friend has made a computer video game called “K ...

  7. 代码块事务—TransactionScope

    今天上班遇到这样的业务:将删除的用户信息记录到记录表,再删除用户表中的信息. 可以说是不幸也可以说是幸运的. 在以往遇到这样的业务,我会考虑到各种出现异常或者失败的情况.在删除一张表数据失败的情况,对 ...

  8. H5的缓存 manifest

    H5里面的App Cache是由开发Web页面的开发者控制的,而不是由Native去控制的,但是Native里面的WebView也需要我们做一下设置才能支持H5的这个特性. 1.工作原理 写Web页面 ...

  9. 前端JavaScript获取时间戳

    /** * 获取时间戳 * @param {*长度} len */ export function getTimestamp(len=) { var tmp = Date.parse( new Dat ...

  10. [AI][tensorflow][keras] archlinux下 tersorflow and keras 安装

    tensorflow TensorFlow is an open-source machine learning library for research and production. https: ...