Java复习3

文章目录

  • **继承**
    • 方法重载和重写
    • 访问修饰符
      • 进行方法重写的时候,重写的方法的访问修饰符的范围需要大于或等于父类的访问范围
    • super,调用父类的成员和方法
  • super和this比较
    • **构造方法调用时,super和this不能同时出现**
    • 继承后的初始化顺序

继承

一种类与类之间的关系
使用已存在的类的定义作为基础建立新类
新类的定义可以增加新的数据或者新的功能,也可以用父类的功能,但不能选择性的选择父类

继承通过extends关键字实现。子类在前父类在后;public class Cat extends Animal{}
一个子类只有一个唯一的一个父类

  • 子类可以直接访问父类非私有成员,不能直接访问私有成员,私有成员只能在本类中访问,即使继承也不行,要想访问只能通过get,set方法访问
  • 父类不可以访问子类特有的成员,即使是public修饰也不行
  • 当子类重写父类方法后,子类的对象调用的是重写后的方法
    例如:Dog类继承了Animal类,Dog类重写eat方法。在主方法里面, Dog two = new Dog(); two.eat(“凡凡”);这时候Dog的对象调用的是重写后的eat方法

方法重载和重写

/**
     * 方法重载:
     * 1、在同一个类里面
     * 2、方法名相同,参数列表不同(参数顺序、个数、类型)
     * 3、方法返回值、访问修饰符任意
     * 4、与方法的参数名无关
     */
 //下面这两个方法不是方法重载,参数列表的顺序不同,指的是数据类型的顺序不同,而不是参数名称的顺序不同,下面这两个方法的数据类型顺序是一样的,所以不是方法重载。与方法的参数名无关
    public void sleep(int month,String name){

    }
    public  void sleep(int name,String month){

    }
 /**
 /**
     * 方法重写:
     * 1、在子类之中重写父类的方法,在有继承关系的子类中
     * 2、方法名称和参数列表都要与父类完全相同(参数的顺序、个数、类型)
     * 3、与方法的参数名无关
     * 4、返回值:当方法的返回值是void或基本数据类型的时候,返回值必须完全相同,不允许被修改。当返回值是引用类型时,可以是父类或者子类
     * 5、访问修饰符:修饰符访问的范围需要大于或者等于父类的访问范围
     */
     */
  • 父类构造方法不允许被继承,不允许被重写,但是会影响子类的实例化

访问修饰符

公有的: public
私有的: private
受保护的: protected
默认:什么权限都不加的情况

 /**
     * private:只允许在本类中进行访问
     * public:允许在任意位置访问
     * protect:允许当前类、同包下所有的类调用。跨包子类能调用,跨包非子类不允许调用。
     * 默认,什么权限都不加的情况:允许在当前类访问,同包下所有类都能调用,跨包无论是子类还是非子类都不允许调用
     */
访问修饰符本类同包子类(跨包)其他
private
默认
protected
public

根据上面的表格访问修饰符修饰的范围可以得出以下结论

进行方法重写的时候,重写的方法的访问修饰符的范围需要大于或等于父类的访问范围

super,调用父类的成员和方法

代表父类对象的引用
super可以访问父类当中允许被子类派生的任意成员,不仅是方法,成员属性等

super.print(); 访问父类成员方法
super.name; 访问父类属性
super(); 访问父类构造方法

//在子类中的方法用super关键字,代表调用的是父类的eat方法,而不是本类中的eat方法
public void sleep(){
        super.eat();//访问父类的eat方法
        super.name = "小志";//访问父类的name属性
        }
//这是父类的有参和无参两个构造方法,构造对象的时候默认调用父类的无参构造方法
 public Animal(){
        System.out.println("我是父类的无参构造方法");
    }
   
 public Animal(String name,int month){
        System.out.println("我是父类的带参构造方法");
    }
    /**
     * 子类构造默认调用父类的无参构造方法
     * 可以通过super()调用父类允许被访问的其他构造方法
     *super()必须放在子类构造方法有效代码第一行
     */
    public Cat(String name,int month){
        super(name,month);//通过super关键字调用指定的父类的带参构造方法,因为首先调用Cat类的构造方法,Cat类的构造方法默认调用的是父类的无参构造方法,super指定调用父类的构造方法,而不一定就是无参构造方法
        System.out.println("我是子类的带参构造");
//这是的对象实例化,调用的不是Cat类的构造方法,因为子类构造默认调用父类的无参构造方法,所以在继承里面,调用的是父类的构造方法
//这个对象实例化调用Cat类的构造方法,然后调用的是默认的父类的无参构造方法,super就指定调用了哪个父类构造方法
        Cat three = new Cat("花花",2);
    }
    //并不是因为有“new Cat("花花",2)”才调用的是有参的构造方法
    //事情是这样的,往下看
    //其实它调用的是Cat类的有参构造方法,如果里面没参数就调用的是Cat类的无参构造方法
    //无论调用的Cat类的哪个类型的构造方法,都会默认继承父类的无参构造方法
    //也就是说,无论调用的什么,都是调用父类无参构造方法
    //而super()就指定了要调用父类哪个构造方法,括号里面放上参数就调用有参构造方法
    //就不一定调用父类的无参构造方法
    //super()必须放在第一行,

super和this一样,都不能在静态方法里面使用
super和this不能用在一个方法里面

super和this比较

构造方法调用时,super和this不能同时出现

this:

  • 访问当前类的成员方法
  • 访问当前类的成员属性
  • 访问当前类的构造方法
  • 不能在静态方法中使用

super:

  • 访问父类的成员方法
  • 访问父类的成员属性
  • 访问父类的构造方法
  • 不能在静态方法中使用

继承后的初始化顺序

父类静态成员→子类静态成员→父类对象构造(属性、构造代码块、构造方法)→子类对象构造

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L小涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值