定义
继承是干啥的?
描述类与类(影响对象与对象)的关系。
因为类与类之间中有一些相同之处和不同之处,人们将这些相同的地方集合起来抽象成一个父类,便于使用一些他们共有的属性(不用每个类总是都要重写一遍相同的内容,只需要写不一样的地方就好了,省事儿!)。
举个栗子:
设置学生为父类,小学生,中学生,大学生都是他的父类。有一些共同属性例如,姓名学号,共同方法:学习、考试。
继承有什么内容
父类,子类
继承关键字
extends
继承的格式
public class 父类名{}
public class 子类名 extends 父类名(){}
子类如何继承父类?(继承规则)
- 子类可以继承父类的所有属性(eg:String name)和方法(函数 public void study(){})。
- 子类可以继承父类属性、方法的范围要求:访问修饰符
public > protected > 缺省 > private (按照开放程度排序)
补一下java项目的层级关系
- 项目
- src源程序
- 包
- .java文件
类与类的存在关系:
不同项目:子类、父类之间不会跨项目使用的。
对象只可以用父类public属性、方法
同项目不同包:子类可以用父类public protected 属性、方法
对象可以用类的public 属性、方法。
同包不同类:子类可以用父类public protected 缺省 属性、方法
对象可以用类的public protected 缺省 属性、方法。
同一个类的括号里面,没有子类,自己的任何属性、方法都可以使用。
(父类里面建子类对象?只有私有属性、方法不可以使用
父类里面建父类对象,任何属性、方法都可以使用、访问)
Hero为父类,Battle为无关类,里面用到了父类、子类的对象,其他都是子类。
3. 子类继承父类的时候要写路径,从.src下面开始写。(一般都会标红,然后右键import就可
以自动插入。)
4. 子类可以重写父类的属性、方法。(具体要求见下方)
方法重写
什么是方法重写?
父类有一些方法函数,但是子类的具体执行情况各有不同,就可以自己写自己的这个方法。
(比如学习这个方法,小学生可能一天读一本书,耗费100点体力,但是中学生可以读10本书,耗费200点体力,大学生读半本书,耗费1000点体力。)
区别于方法重载:方法重载是因为方法函数名字相同,但是方法函数的传参不同,而执行不同的函数。与子类父类没啥关系。
重写规则
- 子类重写父类函数,函数名必须相同,传参必须相同(包括传参内容以及传参个数)。只有访问修饰符可以大于等于父类,方法体可以不同,。
- 方法重写之后按照子类的方法执行。()
- 当定义一个对象时出现一下情况: 父类名 对象名 = new 子类名();这时候该对象执行的是子类的重写函数。
转型
正经转型
必须强转:int a = 1.2; //会报错
正确的int a = (int)1.2;
类之间的转型
自动转型:
class A{}
class B extends A{}
A obj = new B{} //obj是一个A类型的类,将B的方法和属性隐藏掉了。但如果B重写了A的某个方
法,执行还是重写后的那个方法。