【java】继承与方法覆盖

本文详细探讨了Java中的继承特性,包括代码复用、单继承、构造方法不继承等规则,并通过实例解释了方法覆盖(重写)的概念、条件和规则。此外,还介绍了参数传递过程中值传递的原理,展示了方法调用时参数如何传递给方法并影响变量值。
摘要由CSDN通过智能技术生成
package 继承与方法覆盖;

/**
 * 继承:
 *      1、继承"基本"作用:代码复用;"重要"作用:有了继承才有"方法覆盖"和"多态机制"
 *      2、语法:
 *          [修饰符列表] class 类名 extends 父类名{
 *              类体 = 属性 + 方法
 *          }
 *      3、java中继承只支持单继承,一个类不能同时继承很多类,只能继承一个类;
 *      4、术语:
 *          B类继承A类,其中:
 *              A类称为:父类、基类、超类、superclass
 *              B类称为:子类、派生类、subclass
 *      5、继承规则:
 *           私有的不支持继承
 *           构造方法不支持继承
 *           其他数据都可以被继承
 *      6、java中只支持单继承,但一个类可间接继承其他类。
 *          如:
 *              c extends b{}
 *              b extends a{}
 *              a extends m{}
 *              c直接继承b类,c类间接继承a、m类
 *      7、若java中一个类没有显示继承任何类,则该类默认继承javaSE库中提供的java.lang.Object类
 *
 * 方法覆盖:
 *      1、方法覆盖又称为方法重写,override/overwrite
 *      2、什么时候使用方法重写?
 *          当父类方法无法满足当前子类需求,子类须将父类中继承过来的方法进行重写
 *      3、子类重写规则
 *          -方法重写发生在具有继承关系的父子类之间
 *          -返回值类型相同,方法名相同,形参列表相同
 *          -访问权限不能更低,可以更高。公开>保护>私有
 *          -抛出异常不能更多,可更少
 *      4、私有方法、构造方法不能继承,所有不能覆盖
 *         静态方法不存在覆盖
 *         覆盖只针对方法,不谈属性
 */
public class ExtendsTest {
    public static void main(String[] args){
        Animal u = new Animal();
        u.move();

        Dog u1 = new Dog();
        u1.move();

        Bird u2 = new Bird();
        u2.move();
    }

}
public class Animal {

    public void move(){
        System.out.println("动物在移动!");
    }
}
public class Dog extends Animal{

    public void move(){
        System.out.println("狗在狗叫!");
    }
}
public class Bird extends Animal{

    public void move(){
        System.out.println("大鸟在乱飞!");
    }
}

参数传递:

/**
 *  方法调用时,涉及到的参数传递:
 *      传递时,java只遵循一种语法机制,将变量中保存的"值"传递过去,
 *      有时这个值是一个字面值(如test1中的10),有时这个值时另一个java对象的内存地址(如test2中的0*1234).
 *
 *   如:
 *      int i = 10;
 *      int j = i; //i传递给j,实际上只是将i变量中保存的10传递给j,j实际上是一块全新的内存空间
 *
 *      User u = 0*1234; // User u = new User();
 *      User u2 = u;     //u传递给u2,实际上时将0*1234赋值给u2,u和u2实际上时两个不同的局部变量
 *                       //但这两个变量指向堆内存中同一个java对象,一个值改变另一个也改变。
 *
 *
 *
 */
public class Test2 {
    public static void main(String[] args) {
        User u = new User(20);
        // User u = 0*1234;
        add(u);
        System.out.println("main->:"+u.i); //输出21
    }
    public static void add(User u){
        u.i++;
        System.out.println("add->:"+u.i); //输出21
    }
}
    class User{         //构造方法
        int i;
        public User(int i){
            this.i = i;
        }
    }

public class Test1 {
    public static void main(String[] args){
        int i = 10;
        add(i);
        System.out.println("main->:"+i); //输出10
    }
    public static void add(int i){
        i++;
        System.out.println("add->:"+i); //输出11
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值