Java继承

    科技2022-07-15  127

    方法重载

    1、在同一个类中 2、方法名相同,参数列表不同(参数顺序、个数、类型满足其中一个不同即可) 3、方法返回值和访问修饰符任意 4、与方法的参数名无关

    方法重写

    1、有继承关系 2、返回值类型、方法名、参数列表与父类继承的方法完全一致(方法返回值允许是子类类型,返回值与父类兼容)

    public Animal Create(){ return new Animal(); } @Override public Dog Create() { return new Dog(); }

    3、访问修饰符允许有变化(子类的访问范围必须大于等于父类的访问范围:儿子比老子强) 4、与方法的参数名无关(可修改参数名) 注意:方法重写适用于方法,但在父类中也可以定义与父类重名的属性

    继承

    1、子类不能选择性地继承父类,继承所有 2、子类可以访问父类非私有成员 3、父类不可以访问子类特有成员

    访问修饰符(本类内都可访问)不能修饰方法内局部变量

    1、private 只允许在本类内访问**(子类也不可访问)** 2、default 同包子类和同包非子类可访问**(必须满足同包)** 3、protected 同包子类、同包非子类、跨包子类可访问**(同包和子类满足一个即可)** 4、public 允许在任意位置

    父类修饰符只能是public 或默认,不允许protected

    super(代表父类引用)

    1、访问父类成员方法 2、访问父类属性 3、访问父类构造函数 如在测试类中调用eat()/name,首先调用自己重写的方法/变量,加上super即可用于访问父类中允许被子类访问的任意成员

    父类的构造方法

    父类的构造方法不允许被继承、不允许被重写,但会影响子类对象的实例化

    this.Animal();

    报错

    继承的初始化顺序: 加载类: 1、加载父类的静态成员 2、加载子类的静态成员 (包括静态代码块和静态成员属性,访问修饰符不影响静态成员的加载顺序,跟书写位置有关) 加载后有默认值,加载完毕后进行实例化构造: 3、父类的成员属性 4、父类的构造代码块 5、父类的构造函数 6、子类的成员属性 7、子类的构造代码块 8、子类的构造函数

    子类选择父类的构造方法

    1、子类的构造的过程中必须调用其父类的构造方法,如子类的带参构造默认调用父类的无参构造 2、可以通过super()调用父类允许被访问的其他构造方法,必须在构造方法中使用super() 3、super(month,name)必须放在第一行

    super与this对比

    1、super表示父类对象,this表示当前对象 2、均不允许被静态方法调用 3、this、super都必须被放在第一行,因此不能并存 4、构造方法只能在构造方法之间使用

    Object类

    1、Object是所有类的父类 2、一个类没有使用extends关键字明确标识继承关系,则默认继承Object类(包括数组) 3、Java中每个类都可以使用Object类中定义的方法

    子类重写Object类的equals方法

    1、直接继承Object中的equals方法时,比较的是两个引用是否指向同一个对象

    2、==比较的也是两个引用是否指向同一个对象

    Animal animal1=new Animal("花花",5); Animal animal3=animal1; Animal animal2=new Animal("花花",5); System.out.println(animal1.equals(animal2));//继承Object中的equals方法时,比较的是两个引用是否指向同一个对象 System.out.println(animal1.equals(animal3)); System.out.println(animal1==animal2); String str=new String("str1"); String str3=new String("str1"); String str1="str1"; String str2="str1";//继承Object的String类重写了equals方法,比较的字符串的内容(子类可以通过重写equals方法的形式,改变比较的内容) System.out.println(str1.equals(str2)); System.out.println(str.equals(str3)); System.out.println(str1==str2);//指向相同空间 System.out.println(str==str3);//指向不同空间,true

    3、String str1=new String(“str”); Object的子类String重写了equals方法,比较的字符串的内容 String通过对象实例化赋值后,指向不同空间 String通过字面量赋值后,指向相同空间,经过==比较

    子类重写Object类的toString方法

    1、输出对象名默认调用对应的toString方法,输出类名+@+内存地址哈希值

    System.out.println(str.toString()); System.out.println(str3);//继承Object的String类重写了toString方法,子类可以通过重写方法,改变输出的内容及表现形式``` ```java 在这里插入代码片

    final:不允许被继承、重写、修改(不能用于修饰构造函数,构造函数除访问修饰符外不允许添加其他修饰符)

    1、final类:不允许被继承 :public final 或final public 2、final方法:不允许被子类进行重写,但不影响子类继承使用 3、final变量(基本数据类型):不允许被修改,不同于static,final可用于局部变量之前 final变量分为类中成员属性和方法内局部变量 类中成员属性赋值过程包括:在定义时直接初始化、若在定义时没有直接赋值,则只能在构造方法或构造代码块中进行赋值 方法内局部变量只要在具体被使用之前进行赋值即可,一旦被赋值不允许被修改 4、final变量(引用数据类型):类、String、数组等

    ```java public void eat(String name){ System.out.println(name+"别吃了"); final Animal animal=new Animal("芳芳",1); animal=new Animal();//引用不能更改 animal.month=12;//属性值可以可修改 }

    `

    使用static final修饰:不允许被修改,且为全局变量,随着类加载而产生,在程序运行过程中不允许被修改,如修饰配置信息

    Processed: 0.009, SQL: 8