面向对象3

本文详细介绍了Java中的包的使用,包括命名规则和导入。接着讲解了继承的概念、好处、语法以及执行顺序,强调了子类如何覆盖父类的方法。此外,还探讨了super和this关键字的用法,以及final关键字在类、变量和方法中的应用。最后,文章总结了方法重写(覆盖)的规则以及对象创建的过程。
摘要由CSDN通过智能技术生成

Java基础-面向对象3

本章目标

  1. 包的使用
  2. 理解继承的概念、作用、以及实现方式
  3. 理解在继承时,子类如何覆盖父类的操作
  4. 理解在继承时,构造方法的执行过程
  5. 熟练掌握super、this关键字
  6. 熟练掌握final关键字

包的定义

  1. 使用package声明包,以英文分号结尾
  2. 如果有包的声明,一定是Java源代码的第一条语句
  3. 一个Java文件中,最多只能出现一次package语句

包的命名规则

包名由小写字母组成,不能以圆点开头或结尾

一般为域名倒置

项目.模块名

eg:com.baidu.shopping.dao

包的导入

import

继承

继承的好处

  • 父类中方便代码修改
  • 子类中减少代码量

继承的概述

  1. 继承是一种特性,利用继承可以重用已有类,也是代码重用的一种体现
  2. 在Java中,采用extends继承一个已有类,被继承的类被称为父类(超类),继承的类称为子类
  3. 继承符合 is a 关系。例如Dog is a animal 而不能说 Animal is a dog

继承的语法

class SonClass extends FatherClass{}

继承的理解

  • 子类并非继承父类的所有资源,子类继承父类的非private的属性和方法
  • 子类可以拥有自己的属性和方法,即对父类的拓展
  • 子类可以用自己的方法重写覆盖父类的方法
  • Java采用单继承,即一个子类只有一个父类,但是可以采用多重继承 D e C e B e A

继承的顺序

  1. 父类属性
  2. 父类构造方法
  3. 子类属性
  4. 子类构造方法

继承中的protected

保护不同包的子类,可以访问protected的方法和变量

1
package javalearning.kkb7oob4;

/**
 * @author chenxu
 * @date 2020/10/21 - 19:38
 */
public class PersonFather {
    public String name;
    protected String sex;
    String id;
    private int age;

    public void eat(){
        System.out.println("PersonFather.eat");
    }
}
2
   
   package javalearning.kkb7oob4Test;

import javalearning.kkb7oob4.PersonFather;

/**
 * @author chenxu
 * @date 2020/10/21 - 19:42
 */
public class PersonSon extends PersonFather {

    public static void main(String[] args) {
        PersonFather personFather = new PersonFather();
      	personFather.sex = "female";
      //  error: 'sex' has protected access in 'javalearning.kkb7oob4.PersonFather'
        //protected修饰符保护的是不同包的子类的修饰权力
        PersonSon personSon = new PersonSon();
        personSon.sex = "male";
    }
}

super、this关键字

super用于子类访问父类

  • 构造方法(必须在子类的构造方法的第一句)
  • 属性
  • 方法

​ this访问本类构造方法必须放在第一行 访问的是本类的属性和方法 this可以引用当前对象

​ super访问父类的构造方法必须放在第一行 访问的是父类的属性和方法 super只能放在子类中使用

​ super、this都不能放在静态方法中使用,构造方法中引用构造方法时不能同时出现,因为只有一个第一行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tVJr3C7p-1603338247804)(C:\Users\11587\AppData\Roaming\Typora\typora-user-images\1603293270960.png)]

小结

  1. Java是单继承,只有一个父类
  2. 通常在父类中写入一些通用的方法和属性
  3. 子类自动继承父类的非私有方法和属性
  4. 当没有显示继承任何类时,默认继承Java.lang下的Object类

方法的覆盖(方法的重写)&方法重载

规范

  1. 子类方法必须和父类有相同的方法名称、参数列表和返回值类型
  2. 子类方法的访问权限必须大于或等于父类的权限
  3. 子类方法抛出的异常不能大于父类被重写方法的异常

区别和联系

重载就是在同一个类当中有多个名称相同方法,但各个相同方法的参数列表不同(无关返回值类型)

重写则发生在不同的类当中,并且两者要有继承关系,重写是方法名字和参数的列表是要完全一致

对象创建的过程

  1. JVM会先记载父类,再加载子类

  2. 在栈内存中为定义的变量分配内存空间,同时在堆内存中为真正的对象分配内存空间

  3. 调用构造器为创建出来的对象进行初始化

    • 子类所有的构造方法,默认都会调用父类中的无参构造方法==子类实例化之前会先实例化父类

      先执行父类的构造方法在执行子类的,默认在子类的构造方法中第一行加上super();

      如果父类中不存在无参构造,而是有参构造,则需要在子类的构造方法中第一行写上

      super(参数列表)

      父类:
      public class Father {
      
       public Father(){
           System.out.println("Father.Father");
       }
      }
      
      
      子类:
      public class Son extends Father {
      
       public Son(){
           //默认 super();
           System.out.println("Son.Son");
       }
       public static void main(String[] args) {
           Son son = new Son();
       }
      }
      此时输出结果为:
      
      Father.Father
      Son.Son
      

      当父类不存在无参构造时

      public class Father {
       public Father(int a){
           System.out.println("Father.Father");
       }
      }
      
      
      
      public class Son extends Father {
      
       public Son(){
           super(666);//在子类的构造方法中成功调用父类的构造方法即可
           System.out.println("Son.Son");
       }
       public static void main(String[] args) {
           Son son = new Son();
       }
      }
      
      
    • Object类的构造方法是最先被执行的

final概述

  1. final修饰的类不能被继承

    eg:String类

  2. final修饰变量

    • 该变量只能被赋值一次且必须赋值一次

      所以被final修饰的变量是常量

    • 成员变量、局部变量都可以用final修饰

      成员变量在使用final修饰时必须在声明时就赋值(或通过构造方法赋值)变成常量

      public class FinalDemo {
       final int age =12;
       final int num;
       public FinalDemo(int num){
        this.num=num;   //通过构造方法给其赋值
       }
      }
      

      局部变量不用,但是必须在调用成员变量前为其赋值

  3. final修饰方法

    表示该方法不能被重写覆盖

总结

继承

  1. 符合is a 关系
  2. 使用extends关键字
  3. 代码复用

方法重写的规则

  1. 方法名相同
  2. 参数列表相同
  3. 返回值类型相同或者是其子类
  4. 访问权限不能小于父类

super关键字访问父类

  1. super只能出现在子类的方法和其构造方法中

  2. super调用构造方法时,只能出现在第一句

  3. super不能访问父类的private成员

  4. 子类实例化时—先实例化父类,再实例化子类

  5. 在子类中所有的构造方法,默认调用父类的无参构造

    当父类不存在无参构造时,需在子类第一行成功调用父类的有参构造

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值