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中时,单继承的局限就体 ...
随机推荐
- Java实现单向链表基本功能
一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...
- Jquery瀑布流布局,jQuery Wookmark Load 示例
瀑布流布局非常适合大量图片的展示,一改过去裁剪图片尺寸同意的排版,每张图片都能完全展示,并错落有致,让人眼前一亮. 注意事项:img元素的width和weight属性需要写,否则定位会不准确. 查看j ...
- Active MQ 实战(一)
1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...
- 201621123031 《Java程序设计》第13周学习总结
作业13-网络 1.本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被 ...
- aws中的路由表
参考官方文档: 由表中包含一系列被称为路由的规则,可用于判断网络流量的导向目的地. 在您的 VPC 中的每个子网必须与一个路由表关联:路由表控制子网的路由.一个子网一次只能与一个路由表关联,但您可以将 ...
- 2017 清北济南考前刷题Day 3 morning
实际得分:100+0+0=100 T1 右上角是必败态,然后推下去 发现同行全是必胜态或全是必败态,不同行必胜必败交叉 列同行 所以n,m 只要有一个是偶数,先手必胜 #include<cstd ...
- Python习题(第一课)
想了想其他的太简单了,还是不放了,剩三题吧. 一.完美立方 编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d),使得a^3= b^3 + c^3 + d^3,其中 ...
- MySQL InnoDB锁机制
概述: 锁机制在程序中是最常用的机制之一,当一个程序需要多线程并行访问同一资源时,为了避免一致性问题,通常采用锁机制来处理.在数据库的操作中也有相同的问题,当两个线程同时对一条数据进行操作,为了保证数 ...
- C语言学习(二)
今天在程序员面试题中,碰到一个有意思的题目:数组a[N],存放了1至N-1个数,其中某个数重复一次,现在要求找出重复的数字且程序时间复杂度必须为O(N).乍一看,如果不计时间复杂度和空间复杂度程序比较 ...
- Map集合、散列表、红黑树介绍
前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合: Collection总览 List集合就这么简单[源码剖析] 原本我是打算继续将Collection下的 ...