当前位置:   article > 正文

类的继承extends_extends 实现一个类继承

extends 实现一个类继承

        当一个类包含另一个类已有的字段与方法,同时还符合逻辑上的is关系,就可以让前者继承后者。

目录

1.实现:

2.private

3.Object类

3.super限定

6.阻止继承

7.向上转型

8.向下转型(引用类型之间的强制转换)


1.实现:

        使用extends关键字实现

  1. 修饰符 class SubClass extends SuperClass{
  2. //类定义部分
  3. }

2.private

        子类无法访问父类private修饰的字段/方法,可将private-->protected

3.Object类

        任何类,除Object类,都会继承自某个类。(Object是始祖)。

        可以覆写Object类,如toString(),equals(),hashCode();

  1. import java.util.Objects;
  2. public class Main {
  3. public static void main(String[] args) {
  4. SubClass s=new SubClass();
  5. s.name=888;
  6. s.secret=1332;
  7. System.out.println(s.equals(s));
  8. System.out.println(s.toString());
  9. System.out.println(s.hashCode());
  10. }
  11. }
  12. class SubClass{
  13. int name;
  14. int secret;
  15. //toString() 返回该对象的字符串表示
  16. @Override
  17. public String toString(){
  18. return "name of the instance:"+name;
  19. //覆写,返回可以表述该对象信息的字符串
  20. }
  21. //equals(Object obj)判断对象相等,通常没什么用
  22. @Override
  23. public boolean equals(Object obj){
  24. if(obj instanceof SubClass){
  25. SubClass s=(SubClass) obj;
  26. //向下转型
  27. return Objects.equals(this.name, s.name);//当name相等时,返回true
  28. }
  29. return false;
  30. }
  31. //hashCode() 返回对象的hash值,默认根据地址计算。
  32. @Override
  33. public int hashCode(){
  34. //hash算法
  35. int hash=secret/2;
  36. return hash;
  37. }
  38. }

3.super限定

        super指向父类,一般情况super.x        this.x        x  效果是一样的。

  1. 调用父类被覆写的方法,可通过super调用
  2. 任意类的构造方法中,第一个语句必须调用父类构造器。默认为super()无参
  3. 调用父类构造器用super(...);注意参数列表

 #当父类中没有默认的无参构造器时,必须在子类的构造器中调用父类中的有参构造器

  1. class SuperClass{
  2. protected int num;
  3. protected String name="name";
  4. public SuperClass(int num,String name){
  5. this.name=name;
  6. this.num=num;
  7. }
  8. }
  9. class SubClass extends SuperClass{
  10. char c;
  11. public SubClass(int num,String name,char c){
  12. super(num,name);
  13. this.c=c;
  14. }
  15. }

6.阻止继承

        final修饰的class,无法被继承。但可以继承其他类

7.向上转型

 子类类型可以安全的为父类类型赋值,即向上转型。season:子类是父类的扩展

#此时,通过sup调用的方法是子类 覆盖/继承 的父类方法,同时无法调用子类特有的字段/方法。

#sup的实例变量为SuperClass类的实例变量,不是子类的。

#子类可以给方法参数列表中的父类形参 传参 (大大滴有用,可以让代码更简洁)

  1. public class Main {
  2. public static void main(String[] args) {
  3. //SubClass sub=new SuperClass(666,"name");//NO
  4. SuperClass sup=new SubClass(666,"name",'A');//YES
  5. System.out.println(sup.name);//父类sup中的name
  6. sup.test();//子类覆写父类方法
  7. }
  8. }
  9. class SuperClass{
  10. protected int num;
  11. protected String name="sup";
  12. public SuperClass(int num,String name){
  13. this.name=name;
  14. this.num=num;
  15. }
  16. public void test()
  17. {
  18. System.out.println("父类方法");
  19. }
  20. }
  21. class SubClass extends SuperClass{
  22. char c;
  23. protected String name="sub";
  24. public SubClass(int num,String name,char c){
  25. super(num,name);
  26. this.c=c;
  27. }
  28. public void test()
  29. {
  30. System.out.println("子类覆写父类方法");
  31. }
  32. }

8.向下转型(引用类型之间的强制转换)

        将父类类型强制转化为子类类型。

        引用类型之间的强制转换只能发生在父类和子类之间。

#意义:向上转型无法访问子类特有的特有成员/方法。

instanceof 判断前面的对象是否是后面的类/子类。

  1. public class Main {
  2. public static void main(String[] args) {
  3. Animal A=new Cat();
  4. Animal B=new Dog();
  5. Call(A);//喵喵喵
  6. Call(B);//汪汪汪
  7. }
  8. public static void Call(Animal A){
  9. if(A instanceof Cat)
  10. {
  11. ((Cat) A).Call();
  12. }
  13. if(A instanceof Dog)
  14. {
  15. ((Dog) A).Call();
  16. }
  17. }
  18. }
  19. class Animal{
  20. String name;
  21. }
  22. class Cat extends Animal{
  23. public void Call()
  24. {
  25. System.out.println("喵喵喵");
  26. }
  27. }
  28. class Dog extends Animal{
  29. public void Call()
  30. {
  31. System.out.println("汪汪汪");
  32. }
  33. }

        

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/78757
推荐阅读
相关标签
  

闽ICP备14008679号