关于继承的基本知识,方法重写,final和abstract的使用, 动态绑定和静态绑定的知识
一、继承: 涉及关键字: extends(继承) super final abstract
特点: 1、类与类之间可以用 XX是XX来描述 , 那么他们之间就存在继承关系。
2、Java中不支持多继承: 以免发生继承的同名方法冲突。
3、Java支持多层继承。(也就是存在继承体系,要学会如何使用一个继承体系的功能。)
描述: 当A 类 继承与B 类的时候 代码为: class A extends B {}
class S extends B implements interface1 ,interface {}
优点: 1、提高了代码的复用性。
2、让类与类之间产生关系, 有了这个关系, 才有了多态的出现。
注意:如果类与类之间没有所属关系,就不要为了获得其他类的成员而强行定义继承关系。
二、对继承体系的使用方法
1、要想使用一个继承体系,就应该先去查阅这个父类的描述, 因为这个父类中定义的是所有子类的共性成员和功能。
通过对父类中这些功能的了解,就可以知道子类所继承的功能的特点。
2、在具体使用时, 应当创建最子类的对象 原因是:
1)、有可能父类不能创建对象(如被abstract 修饰的类, 也就是 抽象类) 。
2)、对于子类的对象,可以使用更多的功能, 也可以被父类的引用指向。
即:查阅父类功能,创建子类对象使用这些功能。
三、其他关系:
聚合: has a
聚集:球队与队员
组合:人与手脚
四、子父类中变量的特点:
当子类中出现了与父类中同名的成员变量时,我们使用 this关键字访问 子类的成员变量。
我们使用 super关键字访问 父类的成员变量。
而此时,如果是父类引用指向的此子类对象的话, 通过对象名直接访问的此同名变量是父类的变量。
(这个就叫做 静态引用)
五、子父类中函数的特点(重写):
当子类中出现和父类一模一样的非静态函数时,此时我们子类对象调用该函数时(无论是什么引用指向它),会调用子类的函数。
这个就是函数(方法)的另一个特点: 重写。
注:重写的方法的权限不能小于父类的权限。
此时子类对象无论是被父类引用还是被子类引用,我们调用这个函数时, 都是调用的子类的函数。
(这个就叫做 多态 动态绑定 迟绑定)
六、子父类中构造函数的特点:
当对子类对象进行初始化的时候,父类的构造函数也会运行,因为jvm会在子类的构造函数的第一行有一条加上一条语句: super();
super();会访问父类的空参构造函数。
如果要访问指定的父类的构造函数,手动的使用super(实参);进行访问。 而且 super(实参);语句也要写在子类构造函数的第一行。
总结子类的实例化过程:
当子类的构造函数中没有super();语句时,会在构造函数第一句自动加上super();
当父类中没有空参构造函数时,必须手动的使用super()语句进行指定的父类构造函数访问。
同时,子类的构造函数第一句也可以手动的使用this语句来指定访问子类的其他构造函数,而子类所有的构造函数中必须都能直接访问或者互
相找到访问父类的构造函数的接口。
而且,子类中的每个构造如果出现了this() 语句,就不能出现super()语句。
七、final关键字
作用: 修饰符, 用于修饰类、 函数、 变量。
1、被final修饰的类不能被继承。
(避免被继承,被子类复写功能)
2、被final修饰的函数不能被重写。
(当类被继承后,保证父类中有的方法不能被更改时)
3、被final修饰的变量的值不能被更改,既可以修饰成员变量、也可以修饰局部变量。
(就是说一旦被初始化就不能被更改)
作用: 在我们描述事物时,有的数据出现是固定的,但是我们为了提高阅读性,
就会给这个数据定义一个变量名。 for exanple 定义pai = 3.14125
注:可以见得以上就是为一个常量命名, 在为常量命名时,要求所有字母使用大写,单词之间用_连接
所以 上列为: PAI = 3.14125 。 又如 动物腿数: final int LEG_NUM = 4;
注: 与static不冲突。
八、abstract 关键字
特点:
1、抽象方法必须被放在抽象类中。
2、抽象类和抽象方法要被 abstract 修饰。
3、抽象类不能被 new 关键字创建对象, 因为抽象方法调用没有意义。
4、抽象类中的抽象方法要被调用,必须要被子类对象将抽象方法全部重写过后,建立子类对象调用。
如果只是覆盖了部分方法,那这还是个抽象类。
注: 抽象方法要放在抽象类中, 但是抽象类中不是一定要有抽象方法(这样的话,就是不要该类建立对象)
作用:
1、给子类限定方法,强制子类实现这些功能。
九、动态绑定和静态绑定的测试
在父类中定义一个静态属性,静态方法,非静态属性,非静态方法, 在一个继承与其的子类中全部重写(就是重新定义它们),
在测试类中创建一个子类对象,输出四个属性, 之后以一个父类引用指向对象,输出四个属性。
通过测试法现: 只有非静态方法拥有多态、动态绑定、迟绑定。
而其他的都是静态绑定。
代码:
class Futher
{
static String jtsx = "父类的静态属性";
static void pr()
{
System.out.println("父类的静态方法");
}
String sx = "父类的属性";
void prr()
{
System.out.println("父类的方法");
}
}
class Son extends Futher
{
static String jtsx = "子类的静态属性";
static void pr()
{
System.out.println("子类的静态方法");
}
String sx ="子类的属性";
void prr()
{
System.out.println("子类的方法");
}
}
public class TestExtends
{
public static void main(String []args)
{
Son s = new Son();
s.pr();
s.prr();
System.out.println(s.jtsx);
System.out.println(s.sx);
Futher f = s;
f.pr();
f.prr();
System.out.println(f.jtsx);
System.out.println(f.sx);
}
}
运行结果:

关于继承的基本知识,方法重写,final和abstract的使用, 动态绑定和静态绑定的知识的更多相关文章
- 包、继承、Super、方法重写
1 包_继承 1.1 包 包(package) 用于管理程序中的类,主要用于解决类的同名问题.包可以看出目录. 包的作用 [1] 防止命名冲突. [2] 允许类组成一个单元(模块),便于管理和维护 [ ...
- static ,final 、abstract的作用,以及它们的联系和区别
static可以修饰变量,修饰的变量直接属于某各类,不局限于某个方法,无法在成员方法中修饰变量,也不可以在静态方法中修饰变量.被static修饰的方法属于静态方法(类方法),与对象无关,与类有关.fi ...
- 继承extends、super、this、方法重写overiding、final、代码块_DAY08
1:Math类的随机数(掌握) 类名调用静态方法. 包:java.lang 类:Math 方法:public static double random(): Java.lang包下的类是不用导包就可 ...
- 乐字节Java继承|方法重写、super和final关键字
大家好,乐字节的小乐又来了,上一篇是:乐字节Java|JavaBean.继承与权限修饰,也是属于Java继承的,今天继续Java继承. 一. 方法的重写 父类不满足子类的要求,按需改写.注意 方法签名 ...
- Java中实例方法,实例变量,静态方法,静态变量,final方法重写的问题,覆盖
Java中只有非私有的实例方法能被重写,即实现多态,子类可以覆盖父类的方法,但是实例变量不能覆盖,若子类和父类均定义了同样名称的变量,则对于子类来说这是两个不同的变量,要想调用父类的变量必须显示去调用 ...
- java的方法重写 ,多态和关键字 instanceof和final
package cn.pen; /*final 是一个java的关键字,用于修饰局部变量.属性.方法.类,表示最终的意思. final修饰类表示最终类,无法被继承.public final class ...
- 代码块、继承、this、super、final(java基础知识八)
1.代码块的概述和分类 * A:代码块概述 * 在Java中,使用{}括起来的代码被称为代码块.* B:代码块分类 * 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块( ...
- 【Java基础 项目实例--Bank项目5】Account 和 customer 对象等 继承、多态、方法的重写
延续 Java基础 项目实例--Bank项目4 实验要求 实验题目 5: 在银行项目中创建 Account 的两个子类:SavingAccount 和 CheckingAccount 实验目的: 继承 ...
- Java基础进阶:继承重点摘要,继承详解,方法重写注意事项,方法重载与重写的区别,抽象类,代码块, 附重难点,代码实现源码,课堂笔记,课后扩展及答案
继承重点摘要 *继承的特点: 子类在初始化之前,一定要先完成父类数据的初始化 子类在初始化之前,一定要先访问父类构造,完成父类数据的初始化 系统在每一个构造方法中默认隐藏了一句super(); 如果我 ...
随机推荐
- scrapy全站爬取拉勾网及CrawSpider介绍
一.指定模板创建爬虫文件 命令 创建成功后的模板,把http改为https 二.CrawSpider源码介绍 1.官网介绍: 这是用于抓取常规网站的最常用的蜘蛛,因为它通过定义一组规则为跟踪链接提供了 ...
- python数据结构与算法第十天【插入排序】
1.插入排序的原理 2.代码实现 def insert_sort(alist): # 从第二个位置,即下标为1的元素开始向前插入 for i in range(1, len(alist)): # 从第 ...
- shiro框架的UsernamePasswordToken与对应Realm中的AuthenticationToken的一点比较
这里以简单的登陆为例子 控制器对应的登陆方法: @RequestMapping(value = "/login", method = RequestMethod.GET) publ ...
- 如何强制关闭LODOP或c-lodop已经弹出的预览窗口
该文介绍一下LODOP和C-LODOP关于窗口的弹出,和如何强制关闭已经打开的预览窗口. 同一个页面,只能弹出一个窗口,lodop是禁止点击动作,而c-lodop会提示已有窗口开的,请关闭之类的默认提 ...
- LodopFuncs.js和CLodopFuncs.js区别和联系
所在位置:LodopFuncs.js可以在官网下载中心综合版里下载到.CLodopfuncs.js在C-Lodop服务缓存中,C-Lodop启动的时候才能访问到. 需不需要下载放置到项目里:(客户端本 ...
- Javascript 实现复制(Copy)动作方法大全
一.实现点击按钮,复制文本框中的的内容 <script type="text/javascript"> function copyUrl2() { var Url2=d ...
- How to vi
h:left,j:down,k:up,l:right.wq #write and quitx #cut one letterdd#cut one line/ #searchs/a/b/ #replac ...
- Nginx 网络事件
L27-29 应用层(如浏览器等一系列组成的发送get请求) 传输层 系统内核打开一个端口将客户端IP及端口和服务端IP及端口记录下来一并传输到网络层 网络层 打包后到链路层 再到客户端路由器至广域网
- ElasticSearch原理
Elasticsearch-基础介绍及索引原理分析 最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作,花了些时间学习Elasticsearc ...
- Ubuntu16.04系统美化、常用软件安装等,长期更新
Ubuntu16.04系统美化.常用软件安装等,长期更新 IT之家啊 18-09-0915:00 因为我个人偏向于玩VPS.服务器之类的东西,所以一般我都是用CentOS.不过对于桌面版的Linux, ...