继承(extends):

1.作用:为方法覆盖和多态机制做准备;使代码得到复用(节省代码量);

2.格式: class 子类 extends 父类

3.理解继承:子类继承父类,其实就相当于把父类的类体中的所有代码(除了构造方法)复制,粘贴到子类的类体里;

4.当一个类没有继承父类时,将默认继承object类,object类为Java语言提供的“ 祖宗 ”类 “;Java中所有类都会直接 / 间接继承object类,因为即使一个类继承了其他父类,但是它的父类或者父类的父类...总会默认继承object类吧;

5.super : 就一个有用的效果---在子类的构造方法中通过super调用上一个父类的构造来初始化属性;

注意:1)super只能出现在构造方法的第一行;

2)当第一行我们没有手动调用super时,系统会默认有一个“ super ( )  ”,目的是在调用子类构造方法时,先对父类属性进行初始化;

3)不管咱在子类构造方法中调不调用super,super总会出现并起作用的,所以父类的无参构造方法一定不能少(否则奖励报错)。在每一个类体中都把无参构造方法写进去也是一个程序员必不可少的习惯;

4)this ( ) 与super ( ) 会冲突,不用细扣,反正 this 就是用来区分同名的形参和实例变量的,你写在构造方法里干嘛,对吧;

辅助代码理解:

class Animal{
int a;
String b;
public Animal() {
}
public Animal(int a, String b) {
this.a = a;
this.b = b;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public void put(){
System.out.println(a+b);
}
} class Panda extends Animal {
// int a;
// String b;
public Panda() {
}
public Panda(int a, String b) {
super(a, b);
}
// public int getA() {
// return a;
// }
// public void setA(int a) {
// this.a = a;
// }
// public String getB() {
// return b;
// }
// public void setB(String b) {
// this.b = b;
// }
// public void put(){
// System.out.println(a+b);
// }
}

如上代码:因为Panda类继承了Animal类,所以Animal类中除构造方法以外的所有代码(在Panda类体中被注释的代码)都复制粘贴到了Panda的类体中( 隐藏了),所以说Panda类中看似只有俩个构造方法的代码,但其实被注释掉的代码也相当于它的代码;

注意:

1)Java中只支持单继承,不支持多继承,eg: class A extends  S , Z ( 错误写法) ;

2)除构造方法以外,子类会继承父类中的所有代码;

3)当我们修改了父类类体中的代码(除构造方法外)时,那么直接继承 / 间接继承 它的类中的对应的代码也会发生改变;

4)object类体中有一个方法名为“ toString ”,返回值类型为“ String ”的方法,我们在主方法中创建一个对象后,再利用" System . out . print ( 引用 ) 就可以输出“ toString ”中的返回值;

方法覆盖;

1.作用对象;只会发生在有 直接继承 / 间接继承 关系的俩个类之间;

2.上面提到子类会将父类中除了构造方法以外的所有代码都复制粘贴到子类中,那么粘贴过来的方法可不可以进行重写呢?可以,但是注意:第一,访问权限不能降低,只能升高;第二,返回值类型不能改变;第三,方法名必须相同;第四,参数列表必须相同;

辅助理解代码:

class Animal{
String a;
public Animal() {
}
public Animal(String a) {
this.a = a;
}
public void put(){
System.out.println("父类方法执行!");
}
public String toString(){
return "一种动物";
}
} class Panda extends Animal {
public Panda() {
}
public Panda(String a) {
super(a);
}
//对父类中的 put 方法进行方法覆盖
public void put(){
System.out.println("我就不执行父类方法!我就执行我重写的!");
}
//对父类中的 toString 方法进行方法覆盖
public String toString(){
return "一只熊猫";
}
}
public class pra{
public static void main(String[] args) {
Animal an=new Animal();
an.put();//调用此对象的 put 方法
System.out.println(an.toString());//输出此对象的 toString 方法的返回值
Panda pa=new Panda();
pa.put();//调用此对象重写过的 put 方法
System.out.println(pa.toString());//输出此对象重写之后的 toString 方法的返回值
}
} ----------------------------------------------
输出结果; 父类方法执行!
一种动物
我就不执行父类方法!我就执行我重写的!
一只熊猫 Process finished with exit code 0

多态机制:

1.概念:使得同一个属性或方法在父类及其各个子类中具有不同的含义;代码体现:父类引用指向子类型对象;

2.Java程序分为编译阶段和运行阶段,就” 通过子类的构造方法创建对象,并用父类的引用数据变量保存对象地址 “谈谈:

编译阶段,编译器会到引用数据类型对应的父类中找(后面子类调用的)构造方法,找到了,静态绑定成功;运行阶段,由于在堆内存创建的是子类的对象,所以运行阶段绑定的是子类的构造方法,动态绑定成功;所以当用” 父类的引用 . “ 的方式调用方法时,实际执行的是子类中的(方法覆盖的)的方法,访问属性也是同理;

3.意义:提高程序的拓展性,降低耦合性;

辅助理解代码;

class Master{
private String name;
private Pet pet;
public Master(){
}
public Master(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Pet getPet() {
return pet;
}
public void setPet(Pet pet) {
this.pet = pet;
}
public void feed(Pet pet){
pet.eat();
}
}
class Pet{
public Pet(){
}
public void eat(){
System.out.println("宠物在吃主人喂的食物");
}
}
class Dog extends Pet{
public Dog(){
}
public void eat(){
System.out.println("狗在吃主人喂的狗粮");
}
}
class Cat extends Pet{
public Cat(){
}
public void eat(){
System.out.println("猫在吃主人喂的猫粮");
}
}
//以后张三又喜欢养其他的宠物了,就不需要修改张三的feed方法(多态机制的好处),只需再添加一个新宠物子类即可
public class 主人喂宠物 {
public static void main(String[] args){
Master M=new Master("张三");//创建主人对象-张三
Pet p1=new Dog();//创建宠物1(静态绑定) 狗(动态绑定)---真正的对象
Pet p2=new Cat();//创建宠物2(静态绑定) 猫(动态绑定)---真正的对象
M.setPet(p1);//将张三与小狗关联起来(所属关系)
M.feed(p1);//通过调用张三的的feed方法来喂小狗
M.setPet(p2);//将张三与小猫关联起来(现在不养小狗了,养小猫了)
M.feed(p2);//通过调用张三的的feed方法来喂小猫
}
} ------------------------------------
输出结果: 狗在吃主人喂的狗粮
猫在吃主人喂的猫粮 Process finished with exit code 0

随笔:

1.参数列表:参数的个数,参数的种类,参数的顺序(不以参数名为准),不包括参数名;

2.向上转型:指的是将子类引用数据类型转换为父类引用数据类型(类比自动类型转换);

3.向下转型:指的是将父类引用数据类型转换为子类引用数据类型(类比强制类型转换);


由于博主目前还没有将 Java-SE 的知识都学完,所以有些地方可能说的有些片面,若前辈们能够指点一二就更好了      (~ ̄(OO) ̄)ブ

【JAVA】笔记(4)---继承;方法覆盖;多态机制;super;的更多相关文章

  1. JAVA中的继承和覆盖

    java里面的继承是子类继承父类的一些方法和属性(除private属性和方法之外):对于父类的私有属性和方法子类是没有继承的.可是要想子类也能訪问到父类的私有属性,必须给私有属性以外界訪问的方法接口. ...

  2. java笔记4—继承

    继承: 作用: 提高了代码的复用性. 让类与类之间产生了关系,为多态提供了前提 继承中成员变量的特点: 继承中成员函数的特点: 方法重写: 注意:重写方法必须和被重写的方法具有相同的方法名,参数列表和 ...

  3. java继承方法覆盖

    public class TestB { private void f() { System.out.println("TestB"); } public static void ...

  4. Java笔记(十五)……面向对象IV多态(polymorphism)

    概述 定义:某一类事物的多种存在形态. 例:动物中猫,狗. 猫这个对象对应的类型是猫类型 猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为动物. 动物 y = new 猫(); 动 ...

  5. Java多态机制和继承中重写重载

    关于Java中多态机制 http://www.cnblogs.com/chenssy/p/3372798.html 这篇博文讲的很透彻 大体意思是 多态定义: 多态就是指程序中定义的引用变量所指向的具 ...

  6. 六、java基础-单例模式_继承_覆盖_多态

    1.单例模式: 1)提出原因 是由gof 也就是四人组提出来的.为了保证jvm中某一类型的java对象永远只有一个,同时也是为了节省内存的开销.因为外面程序可以通过new的方法直接调用类里面的构造方法 ...

  7. Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)

    (一)Java中的继承: 关于继承,在Java中类的继承只能是单继承,不像C+++那样灵活,可以多继承,多继承的后果就是各种关系乱套,就相当于一个孩子有2个母亲一样,社会关系的复杂,不利于程序后期的开 ...

  8. 【Java学习笔记之十六】浅谈Java中的继承与多态

    1.  什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类更具体.父类具有更 ...

  9. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

随机推荐

  1. WPF进阶技巧和实战03-控件(2-特殊容器)

    ScrollViewer控件 直接继承ContextControl类,提供了虚拟界面,允许用户围绕更大的元素滚动.只能包含单个元素(ContextControl决定),但可以放置布局控件来实现多个任意 ...

  2. 浏览器输入URL之后,HTTP请求返回的完整过程

    1.输入url,按下回车时,先做一个redirect(重定向),因为浏览器可能记录本机的地址已经永久跳转成新的地址,所以一开始浏览器就先要判断下需不需要重定向,以及重定向到哪里:2.然后第二步就是看A ...

  3. 在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。 请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯();当N=9时呢?

    在你面前有一个n阶的楼梯,你一步只能上1阶或2阶.请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯:当N=9时呢? 思路解析 ①台阶只有一级阶梯时,只有一种走法. ②当台阶有两级时,可以先走 ...

  4. Django整理(二) - 视图和模板的初步使用

    Django中的视图 · Django使用视图来编写web应用的业务逻辑 · Django的视图也就是一个函数,可称为视图函数 · 视图定义在应用的view.py文件中 · 视图需要绑定一个URL地址 ...

  5. FastAPI(64)- Settings and Environment Variables 配置项和环境变量

    背景 在许多情况下,应用程序可能需要一些外部设置或配置,例如密钥.数据库凭据.电子邮件服务凭据等. 大多数这些设置都是可变的(可以更改),例如数据库 URL,很多可能是敏感数据,比如密码 出于这个原因 ...

  6. openGauss X ShardingSphere,分布式方案的另一种最佳实践

    Apache ShardingSphere 持续助力于 openGauss 分布式数据库能力的构建.openGauss 数据库自 2020 年 6 月开源以来,受到了业界的广泛关注,现已吸引众多伙伴. ...

  7. MeteoInfo-Java解析与绘图教程(五)

    MeteoInfo-Java解析与绘图教程(五) 最近太忙了,终于有时间继续写了,上文说到了基本上的绘图方法,但缺少色阶呈现,一般图叠加着地图上,后端不需要管色阶,但也要注意web页面色阶和我们的生成 ...

  8. 【数学】快速傅里叶变换(FFT)

    快速傅里叶变换(FFT) FFT 是之前学的,现在过了比较久的时间,终于打算在回顾的时候系统地整理一篇笔记,有写错的部分请指出来啊 qwq. 卷积 卷积.旋积或褶积(英语:Convolution)是通 ...

  9. elasticsearch的索引重建

    我们知道es在字段的mapping建立后就不可再次修改mapping的值.在我们实际的情况下有些时候就是需要修改mapping的值,解决方案就是重新构建索引数据. 方式一 : 使用索引别名,创建另外一 ...

  10. [转]DDR3基础知识介绍

    本文转自:(4条消息) xilinx ddr3 MIG ip核使用详解_admiraion123的博客-CSDN博客 1,DDR3基本内容介绍1.1,DDR3简介DDR3全称double-data-r ...