Java 继承和接口

  1   
2
子类与父类 3 使用extends关键字来声明一个类是另一个类的子类 4 如:class 子类名字 extends 父类名字 5 若是 没有使用extends关键字,那么默认是Object类的子类 包java.lang中 6 父类的数据成员在类中全部存储,包括子类中不能访问的数据成员 (可能有方法会用到) 7 8 子类的继承性:继承的成员变量和成员方法 的访问权限保持 不变 9 如果子类和父类在同一个包中 10 子类继承父类 不是private的 :成员变量 和 成员方法 11 如果子类和父类在不同的包中 12 子类继承父类 protected,public 的 成员变量和成员方法 13 子类不能继承父类的友好变量 和友好 方法 14 15 protected说明: 16 protected:声明的变量和方法,只能在本包中 和子类中进行访问,其他的访问出错 17 类A的protected的变量 和方法 可以被 类A的直接 子类 和间接子类 继承; 18 若在子类B中有声明了protected 的变量和方法: 19 若:其他的类D要想访问子类B的这个protected的变量和方法,只需要这个类D和 类B在同一个 包中 20 若:其他的类D想要访问子类B的父类的proteced的变量和方法,只需要这个类D和 类B的父类 在同一个包中,即可 21 就是追溯到父类的源头 A类 22 23 子类对象构造 24 用子类的构造方法创建对象的时候:子类的构造方法默认会先调用父类的无参构造方法 25 26 成员变量的隐藏: 27 子类中声明的变量和父类中声明的变量同名字:子类就隐藏了 从父类中 继承的这个成员变量 28 使用的是 在子类中新声明的这个同名的变量 29 方法的重写: 30 子类可以通过重写 隐藏 从父类 继承的 实例方法: 31 若是子类想使用 被隐藏的变量或者方法可以是使用super关键字 :super.变量|方法 32 33 34 子类构造方法: 35 super();若是没有写super();会默认有super();默认调用父类的无参构造方法 36 也可以用super(name...);等等父类的多个构造方法 37 比如父类中 name属性 38 1:name=null; 39 2:调用子类的构造函数: 40 3:子类的构造方法 会自动调用 写super("Tom",..)方法 41 4:父类的this.name=name 变成 自定义的值Tom 42 5:然后返回子类中,继续初始化其他方法 43 44 final关键字: 45 final关键字可以修饰:类,成员变量,局部变量,方法 46 final修饰类:这个类不能被继承,即不能有子类-> final class A 47 final修饰方法:这个方法不能被 子类重写 48 final修饰成员变量和局部变量:那么这个变量 就是常量,不能更改,且必须在声明时给出默认值 49 50 51 对象的上转型对象 52 类A 是 类 B 的父类 53 当用子类B创建 一个对象b的时候(即:已经分配了内存空间,子类对象存着引用) 54 将这个对象的引用b放到父类的对象a中,那么称对象a为对象b的上转型对象 55 A a=new B(); 56 上转型对象的实体 会失去 子类对象创建实体的一些属性:(空间内存中仍然存在,不过不能访问) 57 上转型对象a不能操作子类b 新增的成员变量, 58 上转型对象a不能调用子类b 新增的成员方法 59 上转型对象a可以访问子类b 继承或隐藏的 父类a的成员变量:操作都是父类的成员属性 60 上转型对象a可以调用子类b 继承a的方法:操作的是 父类的继承方法 61 若是子类重写了父类的方法,那么上转型对象操作的是 子类中的这个重写的方法 62 上转型对象a可以强制转换到 子类对象b,此时子类对象 有具备了子类的所有功能 63 注意:父类创建的对象 不能转给子类 64 65 66 多态:父类的某个方法被其子类重写时,可以各自产生不同功能 67 多态分为:静态多态,动态多态 68 静态多态:在编译时,就能确定执行哪一段代码(与重载有关) 69 动态多态:在运行时,才能确定引用哪一段代码(与重写父类方法和上转型对象有关) 70 在未运行之前,可能有多个方法调用,不能确定执行调用哪一个 71 72 abstract类和方法 73 abstract修饰的类称为 (abstract) 抽象类 74 public abstract class A 75 抽象类中可以有:抽象方法和 非抽象方法 76 抽象类 不能使用new 运算符 创建对象 77 用abstract修饰的方法 称为(abstract) 抽象方法:public abstract void speak(); 78 抽象方法,只允许声明而不允许实现,且final 和abstract不能同时修饰同一个方法 79 如果一个非抽象类B 是 一个 抽象类A的子类 ,那么 这个 非抽象类 B必须 重写 父类 抽象类A的所有抽象方法,给出方法体 80 如果一个 抽象类 B 是 一个抽象类A的子类 ,那么 这个 抽象类 B 可以重写父类 抽象类A 的 抽象方法;也可以继承 ,不用重写 81 抽象类:只关心操作:即 方法的名字,类型,和参数,不关心方法体 82 83 abstract与多态 84 abstract类声明的对象a 作为子类b的上转型对象 ,可以调用子类b 重写的 方法 85 A a= new B()|new C()|new D();//上转型对象,可以调用 不同子类的方法,但是实现都是同一个方法名字 86 a.方法speak(); 87 程序设计时:通过abstract类声明若干个abstract方法,方法体 由它的非abstract类去实现 88 首先对abstract类的修改进行关闭; 89 否则 一旦在修改abstract类,那么所有的子类都会重新作出修改 90 在程序设计好之后,然后 对abstract 的子类开放 91 92 接口: 93 java不支持多继承性:一个类只能有一个父类 94 但是一个类可以 实现多个接口 95 接口的声明:interace 声明接口: 96 interface 接口的名字->interface A{...} 97 接口体:包含常量定义 和 方法定义 98 常量:接口 中的所有常量 访问权限一定是public final; 99 且常量不可变 public final int cnt=0;//public,final可以省略 100 常量可同通过接口名字调用|或者 实现接口的类 的 类名调用--->接口名.Max|A.Max 101 方法:接口 中 只有 抽象方法,没有普通方法 102 且访问权限是public abstract;可以省略public ,abstract 103 一个类可以通过使用关键字implements声明 自己 实现 一个 或者多个接口(用,隔开接口名) 104 public class A implements 接口1,接口2,...{} 105 如果一个类 实现了某个接口,那么这个类必须重写 这个 接口的 所有方法:一定要加上public 106 重写的方法 要去掉 abstract修饰:即: public 返回类型 方法名(参数){} 107 若一个类 为抽象类A 实现了某个接口,那么可以暂时不用重写 这个接口的abstract方法 108 但是若抽象类A的子类不是抽象类,那么必须重写 所有的abstract方法 109 110 接口回调 :相当于 上转型对象 ,这两个很类似 111 接口回调:是指把 实现 某一个接口的类 B 创建的对象的 引用 b(new B()) 赋值给 接口声明的变量 a(A a;) 112 那么接口变量 a 就可调用 被 这个 类B 重写的接口方法 113 同样不能new 接口,因为没有任何实现,即没有分配内存 114 由接口实现的多态是:不同类 在实现 同一个接口时 ,可能具有不同的实现方式, 115 那么接口变量在回调接口方法 时,就可能 具有 多种多态 116 面向抽象编程包括两种:面向抽象编程 和 面向接口编程
原文地址:https://www.cnblogs.com/NirobertEinteson/p/12012546.html