*继承:
1.关键字 extends
2.子类继承父类当中的所有非私有的属性 和 方法
3.构造器不能被继承
4.继承以后 子类也可以在本类当中声明自己的属性和方法 也可以重写父类的方法
5.子类只能继承一个父类 但是java可以多层继承 爷爷--父亲--儿子
6.继承的优点 和缺点
优点:
提高了代码的复用性
提高了代码的可维护性
缺点:
类的耦合性增强了
开发的原则:高内聚低耦合
内聚:就是自己完成某件事情的能力
耦合:类与类的关系
*this和super关键字:
1.super:调用父类的构造器
2.this:调用本类的构造器
3.子类继承父类后,构造器(无论是有参数还是无参数)的第一行都默认有一个super()
,一旦我们写了this或者是super其中的一个 默认的super()都会消失
4.this和super只能存在一个
*重写:
1.发生在父子类之间 方法名相同 参数列表(类型 个数 顺序)也相同
2.注意:一定是方法名相同 参数列表相同 不然就是子类当中的一个普通方法
3.遵循原则:2同 2小 1大原则
2同:方法名、参数列表相同
2小:返回值类型 要小于等于父类的
抛出的异常 要小于等于父类的
1同:访问修饰词要大于等于父类的
4.举例 :
父类:Person类 子类:Son类
子类类型指向子类对象时:Son s = new Son();
调用的属性和方法都是子类的
父类类型指向子类对象时:Person p = new Person();
调用的属性:编译期间是父类的 运行期间也是父类的 运行期间动态绑定
调用的方法:编译期间是父类的 运行期间是子类的
==调用属性看等号左边 调用方法看等号右边 静态方法都看等号左边==
*多态的体现:
1.父类类型指向子类对象
2.必须要有方法的重写
*抽象类:
(把某种类的共同属性抽出来)
1.关键字:abstract ,abstract不能与static共同使用
2.抽象类:不能被实例化
3.抽象方法:必须由abstract修饰 没有方法体
4.一个类继承抽象类:1)这个类也被abstract修饰 也是一个抽象类(会把抽象方法继承)
2)这个类实现父类所有的抽象方法
5.有抽象方法的类一定是抽象类 反之 抽象类里面不一定有抽象方法
6.抽象类和普通类的区别:抽象类除了不能被实例化以外 其他的属性或者是行为都是一样的
*final:
1.final可以修饰类,方法,变量。
2.final修饰的类不可以被继承
3.final修饰的方法不可以被覆盖(重写)。
4.final修饰的变量是一个常量。只能被赋值一次。
由fianl修饰的量我们叫常量 一般常量和static一起使用 一般常量是大写倾斜加粗
5.什么时候将变量修饰成final呢?
通常在程序中使用一些不会变化的数据.也就是常见的一些常量值.比如3.14,这个数直接使用是可以的,
但并不利于阅读,所以一般情况下,都会被该数据起个容易阅读的名称
6.final修饰的常量定义一般都有书写规范,被final修饰的常量名称,所有字母都大写例如:double PI = 3.14;
如果由多个单词组成每个单词间用下划线连接MY_NAME
*访问权限词:
public protected default private
同一个类中 √ √ √ √
同一个包不同类 √ √ √
不同包子类 √ √
不同包中的类 √
1.一个类顺序 package--import--class
*内部类:
1.写在类的内部的类 会单独编译出 .class 文件 文件名以$开头
2.成员内部类:1)成员内部类与成员变量的修饰词相同
2)成员内部类与成员变量和成员方法优先级相同
3.内部类里面可以访问外部类的属性 无论是不是static的
4.局部内部类:在方法里面写的类
如何调用局部内部类的中的方法:
5.匿名内部类:没有类名的类 当类是抽象的时候 不能被实例化 直接实现类中的方法 现用现写 应用场景 在方法传参的时候用 非常重点