一、 继承的基本概念及其限制

继承:就是扩展已有类的功能,在继承中分为子类和父类,父类有时候也称为超类(super class),子类有时候称为派生类。

继承的基本语法为:class子类 extends 父类 {}

继承的限制:1)在java中不允许多重继承,一个子类只能继承一个父类,不能继承多个父类;2)java中允许多层继承;3)在继承中子类不能访问父类中的私有成员,只能继承公共操作。但是私有成员可以通过公共方法得到访问。

二、  this关键字和super关键字的区别

this在java中变现出以下的概念:

1)  调用类中的属性:this.属性

2)  调用类中的方法:this.方法()

3)  调用类中的构造方法:this()

4)  表示当前对象:this

所有的构造方法应该是在对象操作之前最早调用的,所以用this调用类中其他构造方法的时候,该代码必须放在构造方法中的首行。需要注意:在使用this调用构造方法的时候必须至少有一个构造方法没有使用this()调用的,而此方法将作为程序的出口,一般情况下这个出口定义为无参构造方法。

 

No

比较点

this

super

1

属性

this.属性表示的是本类中的属性,如果在子类中查找不到则到父类中继续查找

Super.属性表示直接查找的父类的属性

2

方法

This.方法()是调用本类中的方法,如果在子类中找不到则到父类中查找

Super.方法()表示直接查找父类的方法

3

构造方法

可以调用本类中的其他构造方法,但是必须有一个构造方法不使用this()调用

从子类调用父类的构造方法,子类不管怎么编码,必须调用父类的构造方法

调用构造时,必须放在构造方法首行

必须放在子类构造方法首行

4

特殊点

表示当前对象

无此概念

No

比较点

重载

覆写

1

英文单词

overload

Override

2

概念

方法名称相同,参数不同(参数或个数)

方法名称、参数、返回值都完全相同

3

注意点

-

访问权限不能变小

4

范围

在同一个类中发生

在继承类中发生

No

比较点

抽象类

接口

1

组成

抽象方法、普通方法、常量、变量、构造方法、全局常量

抽象方法、全局常量

2

定义

Abstract

Interface

3

子类

子类通过extends关键字来继承抽象方法

子类通过implements来实现接口

4

限制

一个子类只能继承一个抽象类

一个子类可以实现多个接口

5

关系

一个抽象类可以实现多个接口

一个接口不能继承一个抽象类只能实现多个接口

一个抽象类中可以由多个接口

一个接口中也可以由多个抽象类

6

设计模式

模板模式

工厂模式、代理模式

两个结合起来可以实现适配器模式

7

实例化

都是通过对象多态性,通过子类进行对象的实例化操作

8

实现限制

存在单继承限制

不存在此限制

9

特性

-

可以作为标准、一种能力

三、 重载和覆写的区别

四、子类的初始化过程

子类在实例化的时候,首先调用的永远都是父类的构造方法。构造方法的作用是为类的属性进行初始化。在实例化子类之前,先将父类实例化。在实际的代码中,如果子类的构造方法中没有显示的调用父类的构造方法,会默认的添加上super()方法用来调用父类的无参构造方法。如果此时父类中没有无参的构造方法,程序编译将出现错误。这时,要么显示的为子类构造函数中添加super(参数)来调用父类中带参数的构造方法,或者为父类添加无参的构造方法。

五、 一个开发原则

在程序开发中要记住一个原则:一个类不要去继承一个已经实现好的类,要么去继承抽象类,要么去实现接口。

六、 一个重要题目

现在要求定义一个数组类(Array),该类中包含一个整型数组,但是该整型数组的大小事动态分配的。即:所有的大小由程序决定,并且实现下面两个子类:

u  反转类:可以将数组的内容反转排列

u  排序类:可以对数组进行排序的操作

[java] view plaincopy
  1. class Array{
  2. private int[] temp = null ; // 声明一个整型数组
  3. private int foot ;  // 定义增加记录的脚标
  4. public Array(int len){
  5. if(len>0){
  6. this.temp = new int[len] ;  // 如果传过来的数据大于0,可以开辟
  7. }else{
  8. this.temp = new int[1] ;    // 最少维持1个数组大小
  9. }
  10. }
  11. public boolean add(int t){  // 增加元素
  12. if(this.foot<this.temp.length){  // 还有空间,可以增加
  13. this.temp[this.foot] = t ;
  14. this.foot++ ;
  15. return true ;
  16. }else{
  17. return false ;// 不能增加
  18. }
  19. }
  20. public int[] getArray(){
  21. return this.temp ;
  22. }
  23. };
[java] view plaincopy
  1. class SortArray extends Array{  // 排序类
  2. public SortArray(int len){  // 在子类的构造方法中必须明确的调用父类的构造方法
  3. super(len) ;
  4. }
  5. public int[] getArray(){
  6. java.util.Arrays.sort(super.getArray()) ;   // 排序
  7. return super.getArray() ;   // 返回排序后的结果
  8. }
  9. };
  10. public class ExecDemo01{
  11. public static void main(String args[]){
  12. SortArray arr = new SortArray(5) ;  // 开辟5个大小的整型数组
  13. System.out.println(arr.add(11)) ;
  14. System.out.println(arr.add(2)) ;
  15. System.out.println(arr.add(33)) ;
  16. System.out.println(arr.add(4)) ;
  17. System.out.println(arr.add(0)) ;
  18. System.out.println(arr.add(6)) ;
  19. print(arr.getArray()) ;
  20. }
  21. public static void print(int temp[]){   // 打印数组
  22. for(int x:temp){
  23. System.out.print(x + "、") ;
  24. }
  25. }
  26. };
[java] view plaincopy
  1. class ReverseArray extends Array{   // 排序类
  2. public ReverseArray(int len){   // 在子类的构造方法中必须明确的调用父类的构造方法
  3. super(len) ;
  4. }
  5. public int[] getArray(){
  6. int x[] = new int[super.getArray().length] ;    // 以父类中的数组大小进行开辟
  7. int count = x.length - 1 ;
  8. for(int i=0;i<super.getArray().length;i++){
  9. x[count] = super.getArray()[i] ;
  10. count-- ;
  11. }
  12. return x ;
  13. }
  14. };
  15. public class ExecDemo01{
  16. public static void main(String args[]){
  17. ReverseArray arr = new ReverseArray(5) ;    // 开辟5个大小的整型数组
  18. System.out.println(arr.add(11)) ;
  19. System.out.println(arr.add(2)) ;
  20. System.out.println(arr.add(33)) ;
  21. System.out.println(arr.add(4)) ;
  22. System.out.println(arr.add(0)) ;
  23. System.out.println(arr.add(6)) ;
  24. print(arr.getArray()) ;
  25. }
  26. public static void print(int temp[]){   // 打印数组
  27. for(int x:temp){
  28. System.out.print(x + "、") ;
  29. }
  30. }
  31. };

在本道程序中融合了以下的知识点:

1、   继承的基本概念:扩充了类的功能

2、   方法的覆写的作用

3、   引用传递

4、   数组的排序、foreach输出

七、  final关键字(重点)

final关键字可以用来做以下声明:

1)  声明类:由final声明的类不能有子类;

2)  声明方法:由final声明的方法不能被子类覆写;

3)  声明变量:由final声明的变量就成为常量,常量的内容不能改变

在java中用final声明的变量为常量,这个常量的标示符一般全部用大写字母表示。

在java中也存在一个很重要的概念:全局变量,用public static final来声明。

八、 抽象类和接口的基本概念和应用

1、抽象类:包含一个抽象方法的类为抽象方法,抽象方法是只声明而没有实现的方法,所有的抽象方法必须用abstract关键字声明,所有的抽象类也必须用abstract关键字声明。

对抽象类来讲,抽象类是不能直接实例化的,但是可以声明,如果要想使用抽象类,则必须依靠其子类,抽象类是必须要被子类继承的,继承抽象类的子类要实现抽象类中的所有抽象方法。

抽象类是不能用final关键字来声明的,因为抽象类必须被子类继承,而final声明的类不能有子类;

抽象类是可以有构造方法的,但是这个构造方法不能直接调用,是交给子类去调用的,实际上子类的实例化过程,永远是先调用父类的构造方法。而且,抽象类中的属性如果想初始化,则必须依赖其构造方法。

2.接口:接口是一个特殊的类,在java中接口是由抽象方法和全局变量组成的,用interface定义一个接口,子类通过implements来实现一个接口。

一个类虽然只能继承一个父类,但是可以同时实现多个接口。

3、对象多态性

多态性是整个java中最重要的一个概念,因为有多态性的存在,程序的灵活性才能实现。多态性是面向对象的最后一个特征:

1)  方法重载和方法覆写其实就是多态性的一种体现;

2)  真正的多态性包括一种叫做对象多态性的概念:

|- 对象的多态性主要是指,子类和父类的对象之间的相互转化;

|-向上转型:父类父类对象 =子类实例   à自动完成

|-向下转型:子类子类对象 =(子类)父类对象 à强制完成

Java提供了instanceof方法来判断一个对象是否属于一个类

对象 instanceof类 à返回boolean类型的结果值,true或者false.

为了保证对象的向下转型的操作能够成功,最好在转型之前使用instanceof来判断一下是否属于该类;

在继承关系中,父类的设计是很重要的,如果父类设计的比较好,代码编辑起来会很方便。

抽象类最大的用处就是模板设计。

九、             抽象类和接口的区别(绝对重点)

10、 object类

      。toString():在对象打印时调用;

 。equals():完成对象的比较工作。

Java继承的基本概念及其限制(基础语法二)相关推荐

  1. java简述标识符和保留字区别_Java 基础语法 - 流年似水莫停留的个人页面 - OSCHINA - 中文开源技术交流社区...

    Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一 ...

  2. JAVA运算的类型兼容原则_Java基础语法回顾(一)

    Java基础语法 Java规范 image.png Java字节码 java程序是以".java"为扩展名,当我们编写完java程序后,要执行程序需要经过两个阶段:编译和运行. 编 ...

  3. 第三次学JAVA再学不好就吃翔(part15)--基础语法之控制跳转语句

    学习笔记,仅供参考 文章目录 JAVA基础语法 break语句 continue语句 标号 return语句 JAVA基础语法 break语句 应用场景 只能在switch和循环中使用 举个例子 cl ...

  4. 第三次学JAVA再学不好就吃翔(part14)--基础语法之循环语句注意事项

    学习笔记,仅供参考 文章目录 JAVA基础语法 for, while, do...while的区别 死循环 循环嵌套 JAVA基础语法 for, while, do-while的区别 do-while ...

  5. 第三次学JAVA再学不好就吃翔(part13)--基础语法之while循环语句

    学习笔记,仅供参考 文章目录 JAVA基础语法 while语句 do...while语句 JAVA基础语法 while语句 格式 初始化语句; while(判断条件语句) {循环体语句;控制条件语句; ...

  6. 第三次学JAVA再学不好就吃翔(part12)--基础语法之for循环语句

    学习笔记,仅供参考 JAVA基础语法 for循环语句 格式 for(初始化表达式;条件表达式;循环后的操作表达式) {循环体;} 执行流程 ①执行初始化表达式: ②执行条件表达式,看其返回值是true ...

  7. 第三次学JAVA再学不好就吃翔(part11)--基础语法之switch语句

    学习笔记,仅供参考 文章目录 JAVA基础语法 switch语句 if语句和switch语句的区别 JAVA基础语法 switch语句 格式 switch (表达式) {case 值1:语句体1;br ...

  8. 第三次学JAVA再学不好就吃翔(part10)--基础语法之if语句

    学习笔记,仅供参考 文章目录 JAVA基础语法 if语句 if语句格式1 if语句格式2 if语句的格式与三元运算符的相互转换 if语句格式3 JAVA基础语法 if语句 if语句格式1 if(比较表 ...

  9. 第三次学JAVA再学不好就吃翔(part9)--基础语法之键盘录入

    学习笔记,仅供参考 文章目录 JAVA基础语法 键盘录入 JAVA基础语法 键盘录入 键盘录入的步骤 //导包(在class之前) import java.util.Scanner; //创建键盘录入 ...

  10. 第三次学JAVA再学不好就吃翔(part8)--基础语法之运算符

    学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 逻辑运算符 逻辑运算符&&和&的区别 逻辑运算符||与|的区别 位运算符 &, |, ^, ~ 的用法 位异或运 ...

最新文章

  1. SEO优化倦怠期?SEO排名和收录都不错时,到底还需不需要日更?
  2. python-类知识点简介
  3. linux ssh终端解决中文乱码的问题
  4. 从外包月薪5K到阿里月薪15K,原理+实战+视频+源码
  5. 阿里云云效技术专家分享:云原生开发、调测及可靠发布解决方案
  6. android懒加载单实例,【 Android 10 设计模式 】系列 -- 单例
  7. Linux升级内核的正确姿势
  8. python 爬取上海体育彩票文章标题、时间、内容
  9. python入门基础知识实例-Python入门,原来如此简单!
  10. 珍惜平时一点一滴,这几个值得跟进学习的阿里、滴滴、微软超级牛人的公众号!...
  11. 怎么用python找资料_python去哪里找资源教程学习?
  12. centos下smartctl安装配置(硬盘S.M.A.R.T信息及坏块检测命令)
  13. 海森(hessian)矩阵
  14. 【论文阅读-表情捕捉】High-quality Real Time Facial Capture Based on Single Camera
  15. 南京周边城市两日游方案
  16. AutoSAR系列讲解(实践篇)10.2-EcuM的上下电流程
  17. 为什么高水平程序员不喜欢接外包项目
  18. 网易web安全:课后问题-CSRF
  19. Linux解压tar.gz文件时提示gzip: stdin: not in gzip format tar: Child returned status 1 tar:
  20. 走近古人的生活 衣食住行

热门文章

  1. Affymetrix基因芯片小总结
  2. 数据库基础(4)函数依赖公理和推论(Armstrong公理),属性闭包和求候选键的技巧
  3. Best生物信息学家应该掌握的数学_之我的看法
  4. ehtools:一款WiFi渗透框架
  5. 226.翻转二叉树 (力扣leetcode) 博主可答疑该问题
  6. java tiles类似_java – 更好地替代Apache Tiles
  7. Cannot resolve plugin org.apache.maven.plugins:xxxx
  8. 简单的解决idea tomcat run正常debug报错
  9. 利用Eclipse中的Maven构建Web项目(一)
  10. codeforces 459 E. Pashmak and Graph(dp)