继承的认识和基本使用
继承概念的引入

- 专业解释:
-
泛化:在多个子类的基础上面抽取共有属性的行为到一个父类中去
-
特化:在一个父类的基础上拓展子类特有的属性和行为,生成一个新的子类
-
原则:父类存放共性,子类存放特性
- 代码理解:
- 三个类都有重复的代码,可以把这部分内容 抽出去,抽出去放到另外一个类里面;
a. 上面的类我们叫做 父类(超类,基类,根类)
- 下面的3个类和上面的类需要发生一点关系【继承】
a. 下面的类我们叫做 子类(派生类,拓展类)
-
提取好处 : 提高了代码的复用性
2.2 Java中类继承的基本语法
1.Java类中的继承的语法格式:
class Animal{}
class Person extends Animal{} //目标就是为了继承到Animal,这个类型
A 就是B的父类; B是A的子类
------------------------------------------------------------------------------
-
没有导包Arrays:
-
class Tools extends java.util.Arrays{ }
-
导包了Arrays
-
class Tools extends Arrays{ }
- 验证:子类中是否可以继承到父类中的东西(通过创建子类对象来操作从父类继承的东西)
class Animal{ String name; void eat(){ System.out.println("吃东西"); } class Person extends Animal{ } class Pig extends Animal{ } 测试类: public class Test { public static void main(String[] args) { Person person = new Person(); person.name = "昊天"; System.out.println(person.name); Pig pig = new Pig(); pig.eat(); } }
子类可以从父类继承哪些成员?
父类的方法,字段,
可能还和访问权限有关 private public.
验证 :非私有的字段 和方法 可以被继承到(暂时这样记忆-主要是从是否可以访问的层面考虑)
构造方法不能够被继承:构造方法(其实每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。父类中的构造方法是不能继承的,但是在实例化子类的时候会调用父类的构造方法,这样就能解释下面这种情况了。
子类可以继承到父类的特性
继承方法的覆写:
public class This_ { //继承 继承和覆盖 public static void main(String[] args) { This2 this2 = new This2(); this2.name = "张三"; //继承父类中的name this2.age = 18; //自己独有的 System.out.println(this2.name + "\n" + this2.age); new Annimol().an_1(); new This2().an_1(); //子类和父类有同样的行为,但是主管行为不一样,所有改变方法一来改变自己的行为 new This3().an_1(); // 方法名和参数必须一致菜叫覆盖 值改变方法 } } class Annimol { String name; //看着这个类共有的属性 父类 String move; String colour; public void an_1() { //构造方法不能继承 System.out.println("我是123"); } } class This2 extends Annimol { int age; //看着这个子类独有的属性 public void an_1() { System.out.println("我是234"); } } class This3 extends This2 { int quantity; //看着这个子类独有的属性 public void an_1() { System.out.println("我是345"); } } 继承到父类的那些东西(1) 非私有的字段及方法(2) 父类特性
继承的特点
(1) 单继承
(2) 多重继承
(3) 没有显示的继承,那么隐式的继承Object
public class Test_Jc { public static void main(String[] args) { } } class Fa { //隐式继承最终父类Object String name; void eat(){ } } class Son1 extends Fa{ // int age; //隐式有一个无参指像Fa的super } class Son2 extends Fa { //只能继承一个父类,可以是fa 也可以是son1,但是只能继承一个 }
-