java的继承性
在java继承中,子类也称为派生类,父类也称为基类或者超类,基本语法 :子类 extends 父类{}
实现一个简单的继承类:
class Person{
private String name;
private int age;
public void setName(String name){
this.name = name ;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age ;
}
public int getAge(){
return age ;
}
}
class Student extends Person{
private String school ;
public void setSchool(String school){
this.school = school ;
}
public String getSchool(){
return school ;
}
}
public class Test{
public static void main(String args[]){
Student stu = new Student();
stu.setName("小学生");//父类方法
stu.setAge(18);//父类方法
stu.setSchool("蓝翔挖掘机专修学院"); //自身方法
System.out.println(stu.getName()+"、" + stu.getAge() + "、" + stu.getSchool());
}
}
在对子类进行实例化的时候,先是执行父类构造方法,然后执行子类
class Person{
public Person(){
System.out.println("父类无参构造");
}
}
class Student extends Person{
public Student(){
super();//此处不写super();也会默认调用
System.out.println("子类无参构造");
}
}
public class Test{
public static void main(String args[]){
new Student();//此时默认调用父类无参构造
}
}
/*执行结果:
父类无参构造
子类无参构造
*/
class Person{
private String name;
public Person(String name){
System.out.println("父类无参构造" + name);
}
}
class Student extends Person{
public Student(){
super("java");//调用父类的有参构造,一定要放在第一个语句,和this()相似
System.out.println("子类无参构造");
}
}
public class Test{
public static void main(String args[]){
new Student();//此时默认调用父类无参构造
}
}
/*执行结果:
父类无参构造
子类无参构造
*/
子类覆写父类的方法中的注意点
实例化的是哪一个类,在实例化对象在调用的时候就会默认调用该类的方法,如果子类不存在该方法,则会调用父类中的该方法,
子类在覆写父类中的方法时候,方法的访问权限不能比父类要高,如果父类使用了private定义了一个方法,那么子类无法覆写,因为private定义的方法对外不可见只可以在本类中使用,即使子类写了一个相同的方法,也不可以称为覆写
class A{
public void print(){
System.out.println("A类中的方法");
}
public void fun(){
System.out.println("B类没有覆写该方法,默认调用父类");
}
}
class B extends A{
public void print(){
System.out.println("B类中的方法");
}
}
public class Test{
public static void main(String args[]){
B b = new B();
b.print(); //B类中的方法
b.fun(); //B类没有覆写该方法,默认调用父类
}
}
this.方法():首先会查找子类是否存在该方法,如果存在则直接调用,如果不存在则查找父类中是否有该方法,如果有则直接调用,如果没有则出现编译错误;
super.方法():直接调用父类中的该方法,如果不存在则出现编译时的错误;
重载和覆写之间的区别:
重载(Overloading):在一个类中进行;方法名相同,参数个数以及类型不同;方法定义的没有权限限制;
覆写(overrid):发生在继承关系中;方法名称相同,参数个数以及类型相同,返回值相同;子类不能比父类更加严格;
一个不需要注意的继承案例
class Array{
private int data[];
private int foot;
public Array(int len){
if(len != 0){
this.data = new int[len];
}else{
this.data = new int[1];
}
}
public void add(int num){
if(this.foot>=this.data.length){
return;
}else{
this.data[foot++] =num;
}
}
public int[] getData(){
return this.data;
}
}
//定义一个排序类
class SortArray extends Array{
public SortArray(int len){
super(len);//明确调用父类的有参构造,作用是为数组初始化
}
//覆写父类方法
public int[] getData(){
java.util.Arrays.sort(super.getData());//
return super.getData();
}
}
//反转数组
class ReverseArray extends Array{
public ReverseArray(int len){
super(len);
}
public int[] getData(){
int num = super.getData().length/2;//反转次数
int head = 0;
int tail = super.getData().length - 1;
for(int x = 0;x < num;x++){
int temp = super.getData()[head];
super.getData()[head] = super.getData()[tail];
super.getData()[tail] = temp;
head ++;
tail --; }
return super.getData();
}
}
public class Test{
public static void main(String args[]){
ReverseArray arr = new ReverseArray(3);
arr.add(1);
arr.add(10);
arr.add(3);
arr.add(4);
//arr.add(5);
int data[] = arr.getData();
for(int x=0;x<data.length;x++){
System.out.print(data[x]+"\t");
}
}
}
java的继承性的更多相关文章
- Java之继承性
为什么要有继承 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可.其中,多个类可以称为子类,单独那一个类称为父类.超类或者基类. 继 ...
- java 面向对象(十二):面向对象的特征二:继承性 (一) 前言
1.为什么要有类的继承性?(继承性的好处) * ① 减少了代码的冗余,提高了代码的复用性 * ② 便于功能的扩展 * ③ 为之后多态性的使用,提供了前提图示: 2.继承性的格式:class A ext ...
- Java学习---基础知识学习
2016-07-23 周六 利用键盘输入的时候需要抛出异常 ,直接快捷键 ctrl + 1 ;定义数组 int score[] = new int[4] ; 只有4个数字BufferedRead ...
- 浅谈Java三大特性之继承
前言 简单用伪代码去介绍一些 父类与子类的构造函数问题 others 前言 类的继承性是面向对象语言的基本特性,多态性前提是继承性.Java 支持继承性和多态性.——Java从小白到大牛 继承:三大特 ...
- JAVASE(九)面向对象特性之 : 继承性、方法重写、关键字super、
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.继承性 1.1 为什么要类的继承性?(继承性的好处) ①减少了代码的冗余,提高了代码的复用性:②更好 ...
- java 面向对象(二十四):interface:接口
interface:接口1.使用说明: 1.接口使用interface来定义 * 2.Java中,接口和类是并列的两个结构 * 3.如何定义接口:定义接口中的成员 * * 3.1 JDK7及以前:只能 ...
- Java基础语法,常用知识复习
1.开发环境搭建 1.1JDK.JRE.JVM.的关系 JDK = JRE + 开发工具集(例如javac编译工具集等) JRE = JVM + Java SE 标准类库 2.基本语法 2.1.jav ...
- 尚硅谷Java——宋红康笔记【day11-day18】
day11 Eclipse中的快捷键: * 1.补全代码的声明:alt + / * 2.快速修复: ctrl + 1 * 3.批量导包:ctrl + shift + o * 4.使用单行注释:ctrl ...
- <Android Framework 之路>多线程
多线程编程 JAVA多线程方式 1. 继承Thread线程,实现run方法 2. 实现Runnable接口 JAVA单继承性,当我们想将一个已经继承了其他类的子类放到Thread中时,单继承的局限就体 ...
随机推荐
- selenium + robotframework的运行原理
1.点击ride界面启动用例执行时,首先会调用脚本 2.打开pybot脚本查看内容. 3.打开robot包下面的run文件,我们可以看到信息 run文件内容 程序启动的入口, sys.agv所表达的含 ...
- 如何用Word编辑参考文献------这是引用一位大师的
如何用Word编辑参考文献修改文献是一件非常痛苦的事情,虽然现在也有很多软件可以编排参考文献,其实word本身就可以. 采用合适的编辑方法会方便地做到整齐,规范,自动排序和交叉引用.1.以尾注的方式插 ...
- Redux----Regular的Redux实现整理
Regular的Redux实现整理 什么问题? 组件的树形结构决定了数据的流向,导致的数据传递黑洞 怎么解决? 所有组件都通过中介者传递共享数据 方案: 中介者: (function create ...
- Docker深入浅出系列教程——Docker简介
我是架构师张飞洪,钻进浩瀚代码,十年有余,人不堪其累,吾不改其乐.如果你和我的看法不一样,请关注我的头条号,我们一起奇闻共赏,疑义相析. 本节属于入门简介,从三个小方面进行简单介绍Docker. Do ...
- 关于python词典(Dictionary)的get()用法
先贴出参考链接:http://www.runoob.com/python/att-dictionary-get.html get()方法语法: dict.get(key, default=None) ...
- 【iOS】swift 排序Sort函数用法(包含NSDictionary排序)
用了几分钟做的简单翻译 一个例子 直接贴代码,不过多解释 //这是我们的model class imageFile { var fileName = String() var fileID = Int ...
- Struts2之配置文件中Action的详细配置
在Struts2之配置一文中,我们知道一个struts配置文件可以分为三部分:常量配置 包含其他配置文件的配置 Action配置 . 这其中 常量配置 和 包含其他配置文件的配置 二 ...
- 从PRISM开始学WPF(四)Prism-Module?
从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...
- 02-移动端开发教程-CSS3新特性(中)
1. 新的背景 背景在CSS3中也得到很大程度的增强,比如背景图片尺寸.背景裁切区域.背景定位参照点.多重背景等. 1.1 background-size设置背景图片的尺寸 cover会自动调整缩放比 ...
- LeetCode & 118-Pascal's Triangle-Easy
Array Description: Given numRows, generate the first numRows of Pascal's triangle. For example, give ...