面向对象_04【关键字:super使用】

时间:2022-09-26 03:34:24

super关键字:解决当子类重写父类对象方法后,子类对象无法访问父类的成员
1,调用父类成员变量和方法
  super.成员变量
  super.成员方法([参数1,参数2.......])
Example:

 //super关键字调用父类成员变量及成员方法
 package new_Object;
 class Animal_03{
     String name="动物";
     //定义父类shout方法
     public void shout(){
         System.out.println("super父类方法");
     }
 }
 class Dog_03 extends Animal_03{
     public void shout(){
         String name ="犬类";
         super.shout();//访问父类成员方法
     }
     //访问父类成员变量
     void printf(){
         System.out.println("name="+super.name);
     }
 }
 public class Example03_Extends_super {
     public static void main(String[] args) {
         Dog_03 p1=new Dog_03();
         p1.shout();//调用重写的shut方法
         p1.printf();
     }

 }

面向对象_04【关键字:super使用】

2,super调用父类的构造方法
  super([参数1,参数2.......])
Example

 //super关键字访问父类构造方法
 package new_Object;
 class Animal_04{
     //定义Animal_04类有参构造方法
     public Animal_04(String name){
         System.out.println("这是一匹"+name);
     }
 }
 //继承类
 class Horse_04 extends Animal_04{
     public Horse_04(){
         super("马");//调用父类的构造方法
     }
 }
 public class Example04_Extends_super {
     public static void main(String[] args) {
         Horse_04 p=new Horse_04();
     }
 }

面向对象_04【关键字:super使用】

====================================================================================================================================
                                  补充
====================================================================================================================================
在子父类中成员变量、成员函数、构造函数的特点之体现
1,成员变变量

=>当本类中的成员和局部变量同名用this区分
=>当子父类中的成员变量同名用super区分父类

this和super很相似
* =>this:代表一个本类对象的引用
* =>super:代表一个父类空间

 //1,成员变量
 package new_Object;
 class Fu{
     int num=6;//定义父类成员变量
 }
 //子类继承父类
 class Zi extends Fu{
     int num=8;//定义子类的成员变量
     void show(){
         //super访问父类成员的变量
         System.out.println(super.num+"......"+super.num);
         //this调用本类、super调用父类
         System.out.println(this.num+"......"+super.num);
     }
 }
 public class Extends_02 {
     public static void main(String[] args) {
         Zi z=new Zi();
         z.show();
     }
 }

run:6.....6
    8.....6

2,成员函数

=>当子父类中出现成员函数一模一样的情况下,会执行子类函数。
* 这现象称覆盖操作,这是函数在子父类中的特性。
* =>函数两特性:
* 1,重载。同一个类中
* 2,覆盖(重写)。子类中。
* 覆盖注意事项:
* 1,子类方法覆盖父类方法时,子类权限>=父类权限
* 2,静态只能被静态覆盖,或者被静态覆盖.

 //2,成员函数
 package new_Object;
 class Fu_1{
     void show(){
         System.out.println("fu show run");
     }
 }
 class Zi_1 extends Fu_1{
     void show(){
         super.show();//访问父类show
     }
 }
 public class Extends_03 {
     public static void main(String[] args) {
         Zi_1 z=new Zi_1();
         z.show();
     }
 }

run:fu show run

2.1 什么时候使用覆盖?
  =>当一个类进行子类的扩展时,子类需要保留父类功能声明,但要定义子类中该功能的特有内容时。

 //覆盖的应用
 package new_Object;
 //定义一个手机只有显示功能
 class Phone{
     void show(){
         System.out.println("number");
     }
 }
 //新手机继承旧手机的显示功能时又添加新的功能 name pic
 class NewPhone extends Phone {
     void show(){
         System.out.println("name");
         System.out.println("pic");
         /*System.out.println("number");*/super.show();
     }
 }
 public class Extends_031 {
     public static void main(String[] args) {
         NewPhone p=new NewPhone();
         p.show();
     }
 }

面向对象_04【关键字:super使用】

3,构造函数

* =>在子类构造对象时,访问父类的构造函数时,父类构造函数也执行?
*   >在子类的构造函数的第一行有一个默认的隐式语句:super();

* =>子类实例化过程:子类中所有的构造函数都会默认访问父类中的空参数的构造函数
* =>为什么子类实例化的时候要访问父类中的构造函数?
*   >子类继承了父类,获取到父类中的内容(属性),所以在使用父类内容之前,先看父类如何自己初始化。所以在子类构造对象时,必须先访问父类中的构造函数。

* =>如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用父类中哪一个构造函数。同时子类构造函数中如果使用this调用本类构造函数时,那么super就不存在,super和this都是定义在第一行。但是可以保证的是子类中肯定会有其他构造函数访问父类的构造函数。

* =>注意:super语句必须定义在子类的构造函数第一行。因为父类的初始化动作先完成。

 //3,构造函数
 package new_Object;
 /*class Fu_04{
     //无参
     Fu_04(){
         System.out.println("Fu构造函数run");
     }
 }
 class Zi_04 extends Fu_04{
     Zi_04(){
         //super();=>相当于this();调用的是父类中的空参数构造函数
         System.out.println("Zi构造函数run");
     }
 }
 /*run:Fu构造函数run
       Zi构造函数run
 */
 class Fu_04{
     //有参
     Fu_04(int x){
     System.out.println("Fu构造函数run");
     }
 }
 class Zi_04 extends Fu_04{
     Zi_04(){
     super(1);//调用父类int型构造参数
     System.out.println("Zi构造函数run");
     }
 }
 public class Extends_04 {
     public static void main(String[] args) {
         new Zi_04();
     }
 }

面向对象_04【关键字:super使用】

Example:

 package new_Object;
 class Fu_05{
     Fu_05(){
         super();//隐式语句
         show();
         return;
     }
     void show(){
         System.out.println("fu show");
     }
 }
 class Zi_05 extends Fu_05{
     int num=8;
     Zi_05(){
         super();
         /*通过super初始化父类时,子类成员变量未显示初始化变量,super()父类初始化完成后
         子类才进行成员变量初始化
         */
         return;
     }
     void show(){
         System.out.println("zi show..."+num);
     }
 }
 public class Extends_05 {
     public static void main(String[] args) {
         Zi_05 z=new Zi_05();
         z.show();
     }
 }

面向对象_04【关键字:super使用】

面向对象_04【关键字:super使用】的更多相关文章

  1. Java面向对象之关键字super 入门实例

    一.基础概念 (一)super关键字 super关键字的用法和this相似.this代表的是当前对象.super代表的是父类中内存空间. 子父类中是不会出现同名属性的情况. (二)继承中.成员变量问题 ...

  2. Java面向对象----继承概念,super关键字

    继承概念: 继承需要符合的关系  is-a  , 父类通用更抽象,子类更特殊更具体 类之间的关系 继承体现 组合体现 实现接口体现 继承的意义 代码重用 体现不同抽象层次 extends关键字 Sup ...

  3. JAVASE(九)面向对象特性之 : 继承性、方法重写、关键字super、

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.继承性 1.1 为什么要类的继承性?(继承性的好处) ①减少了代码的冗余,提高了代码的复用性:②更好 ...

  4. JAVA面向对象-----final关键字

    JAVA面向对象-–final关键字 1:定义静态方法求圆的面积 2:定义静态方法求圆的周长 3:发现方法中有重复的代码,就是PI,圆周率. 1:如果需要提高计算精度,就需要修改每个方法中圆周率. 4 ...

  5. 10 面向对象(package关键字的概述及作用)

    10.01_面向对象(package关键字的概述及作用) A:为什么要有包 *开发时有很多类,如果放在一个文件夹中不方便管理,而且容易重复 将字节码(.class)进行分类存放 包其实就是文件夹 B: ...

  6. 面向对象-static关键字实战案例

    面向对象-static关键字实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.static关键字概述 1>.static的功能 static关键字用于修饰成员变量和 ...

  7. Java基础语法(11)-面向对象之关键字

    title: Java基础语法(11)-面向对象之关键字 blog: CSDN data: Java学习路线及视频 1.this this是什么 它在方法内部使用,即这个方法所属对象的引用: clas ...

  8. Java中的两个关键字——super、this

    Java中的两个关键字——super.this 神话丿小王子的博客主页 一.super super 是java中方的一个关键字,用它可以引用父类中的成员: super可用于访问父类中定义的属性 sup ...

  9. Java开发笔记(四十九)关键字super的用法

    前面介绍了如何从Bird类继承而来Swallow类,按道理子类应当继承父类的所有要素,但是对于构造方法来说,Swallow类仅仅继承了Bird类的默认构造方法,并未自动继承带参数的构造方法.如果子类想 ...

  10. Java 继承extends、关键字super和this、多态、动态绑定

    Manager 经理  extends Employee 雇员 "is-a"(是)关系是继承的一个明显特征.每个经理都是一名雇员. 从术语的角度讲,Manager是子类,Emplo ...

随机推荐

  1. 在win7环境下安装python2.6.6

    Python2.x与3.x语法并不相同,这里装的是2.6.6的版本. 1.下载Python2.6.6: https://www.python.org/downloads/ 根据自身计算机的特点选择Py ...

  2. redis入门笔记(1)

    redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...

  3. JS中的事件类型和事件属性的基础知识

    周末无聊, 这几天又复习了下JS搞基程序设计3, 想着好记性不如浪笔头哇, 要么把这些东西写下来, 这样基础才能更加扎实么么哒, 知道的同学也可以直接过一下,当做复习,  小姨子再也不用担心我的学习啦 ...

  4. Android课程---String、StringBuffer 、StringBuilder 的区别(转)

    String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全)  简要的说, String 类型和 StringBuffer 类型的主 ...

  5. POJ 3181 Dollar Dayz DP

    f[i][j]=f[i-j][j]+f[i][j-1],结果很大需要高精度. //#pragma comment(linker, "/STACK:1024000000,1024000000& ...

  6. hold

    嘿嘿,很久没写博客了.一懒一拖一浮躁就不行了. 果然烦心事太多,一直懒得编程.结果还是编程才能平复我啊! 明天那什么,别担心,平常心嘛! 还好,看了几部电影,不算没收获.自己有意思就看看电影,别瞎想啥 ...

  7. 【MySQL】使用 Optimizer Trace 观察SQL执行过程

    Optimizer Trace 是MySQL 5.6.3里新加的一个特性,可以把MySQL Optimizer的决策和执行过程输出成文本.输出使用JSON格式,便于程序分析和人类阅读. 使用方法 1) ...

  8. C#异步线程

    对需要同时进行的操作进行异步线程处理:例如在一个button按钮点击事件中同时进行两种事件操作private void button_Click(object sender, EventArgs e) ...

  9. java回调机制——基本理解

    回调(diao):往回调用,反向调用. 英文 call back.call:调用,back:返回,往返. 回调的意思就是杀个回马枪...... 回调(callback),既然是往回调用,那自然有一个正 ...

  10. CSS笔记之Grid网格系统

    Grid布局已经不是新鲜的技术了,但一直都是使用了Flex布局,如今需要了边学习边做些常用的笔记.首先grid和flex一样都不支持IE10以下的浏览器 基本布局: 一般是所有子元素都横向排列或者都纵 ...