/*
一.抽象类的特点:
1.抽象类和抽象方法都要用一个关键字修饰abstract
修饰类放在class前面
例如:abstract class Animal3{}
修饰一个方法一般放在权限修饰符后面
例如:public abstract void show();
2.有抽象方法的类一定是抽象类,抽象类不一定有抽象方法
具体的类中不能有抽象方法,抽象类中既可以存在抽象方法,也可以存在有方法体的方法
3.抽象类不能被实例化
通过多态的形式,使用具体的子类去实例化调用方法
4.如果继承抽象类的是一个具体的子类,需要重写该抽象类中的所有抽象方法
如果继承抽象的也是一个抽象类,可以不去重写父类中的抽象方法,也可以选择性的去重写
*/
/*
二.抽象类的成员的特点:
成员变量:
既可以是变量,也可以是常量
构造方法:
可以存在构造方法 这里构造方法是提供初始化父类的作用
成员方法:
可以是抽象方法,但是具体的子类必须要重写该方法
也可以不是抽象方法,提高代码的复用性
*/
/*
三.抽象类中可以没有抽象方法
2、抽象类不能被实例
抽象类中可以存在哪些关键字?
abstract关键字不能和哪些关键字共存?
private
static
final
abstract不能和private static final 共存
可以和public共存
*/
/* 四. 多态的好处有哪些?
1、多态可以使代码的扩展性很好(这是由继承所保证的)
2、多态可以使代码的维护性很好(这是由多态保证的)
*/
/*
五.方法重写注意事项:
1.父类中的私有方法不能被重写
2.子类重写父类的权限不能更低
要么更高、要么一样,建议以后重写时子类权限修饰符和父类一样
3.父类中静态的方法不能被重写,静态属于类本身的东西
*/
/*
六 final的特点:
final:最终的的意思。它可以修饰类,成员变量,成员方法
特点:
1、修饰类,类不能被继承
2、修饰成员变量,变量变常量,并且只能赋值一次,在构造方法完毕之前赋值即可。
常量:
字面值常量
自定义常量:被final修饰变量变成自定义常量
3、final修饰成员方法:方法不能被重写
*/
七.//alt+enter 抽象类快捷键生成重写
//alt+ins快捷键生成构造方法
/*
八.面试题:
final修饰局部变量
1、在方法内部,修饰基本数据类型的变量,变量值只能赋值一次,不能发生改变
2、final修饰引用数据类型的变量呢?
引用的地址值不可以发生改变你,但是该对象的堆内存中的值是可以发生改变的。
*/
九.多态的前提:
1.要有继承关系
2.要有方法的重写
其实没有重写也是可以的,但是不重写就没有意义
3.要有父类的引用指向子类对象
父类名 f = new 子类名(...)
多态访问成员的特点:
1.成员变量
编译看左,运行看左
2.构造方法
创建子类对象 先访问父类中的构造方法 对父类数据先进行初始化
3.成员方法
编译看左,运行看右
因为成员方法存在重写,所以访问看右边
4.静态成员方法
编译看左,运行也看左
由于被static修饰的成员都是与类相关的,这里不是重写,所以运行的时候,访问的还是左边的。
*/
/*
十.多态的前提:(三个缺一不可)
1、要有继承的关系
2、子类要重写父类中的方法
3、父类的引用指向子类对象
多态的弊端:
多态无法使用父类特有的方法
*/
/*
十一.多态无法访问父类中的方法名一样的方法
1.想使用父类的方法,不适用多态
2.想使用子类中特有的方法 还必须多态
将父类的引用强制转换成子类的引用
子类类名 变量名 = (子类类名)父类的引用
对象之间转型的问题
向上转型
Fu f = new Son
向下转型
Son s = (Son)f
向下转型需要注意 要求转型的类与父类引用存在继承关系,并且一开始创建多态的时候 使用的是该类
*/
/*
十二. 有些时候,我们不想让子类覆盖重写父类中的方法或者功能,只能让子类去使用。
那怎么办呢?
针对这个情况,java提供了一个关键字:final
final:最终的意思。可以修饰类,成员变量,成员方法。
*/
总结
面向对象的三大特征
封装 继承 多态
封装:隐藏类中的属性,提供公共的方法给外界
1.private私有,它可以修饰成员变量 构造方法 成员方法
一个标准类1.0
成员变量:被private
成员方法:getxxx()和setxxx()
show():遍历所有方法变量值
2.this关键字
一个标准类2.0
给变量名起名讲究见明知意 为了可以去调用当前对象中的成员变量,我们引出了this 代表的是调用方法的当前对象
3.构造方法
为了创建对象
可以发生重载 可以给成员变量进行初始化值
一个标准类3.0
成员变量:使用private关键字修饰
构造方法:一个无参构造方法 一个带所有参数的构造方法
成员方法:getXxx()和SetXxx()
show()遍历所有的成员变量值
4.static
可以被所有类的对象共享的成员 使用static修饰
特点:可以直接通过类名 静态成员的方式调用
随着类的加载而加载 也称为类成员
二:继承 多个类中存在相同属性和行为时 将这些内容抽取到单独一个类中 那么多个类不需要再定义这些属性和行为 只要继承哪个类即可
1.定义语句格式
class A{}
class B extends A{}
B称为子类 或者派生类
A称为父类 超类或者基类
2.java中只支持单个继承 不支持一次继承多个类 但是可以多层次继承
3.super关键字 在子类要想访问父类的成员 就是用super关键字
super可以访问父类非私有成员变量 构造方法 成员方法
this可以访问本类非私有成员变量 构造方法 成员方法
面试题 this和super的区别
this 代表的是调用该类的当前对象
super 代表的是父类存储空间的标识(父类的引用,可以操作父类的成员)
4.要想初始化子类 必须先初始化父类
5.重写 发生在继承关系中
子类重写/覆盖父类中的方法 声明与父类中的一摸一样 知识实现不一样
面试题 重写与重载的区别 即overload和override的区别
重写是发生在继承的关系的关系中,重载是发生在本类中。
重写是方法名,参数列表,返回值都一样,实现不一样,叫方法的重写
重载是方法名一致,参数列表不一致就是重载。
6.final关键字:他可以修饰成员变量 成员方法 类
修饰类:类不能被继承
修饰成员变量:变量变成自定义常量
修饰成员方法:方法不能被重写
7.final修饰成员变量的初始化时机 在对象构造完毕前即可
8.多态
多态的前提:
要有继承关系
要有方法的重写
要有父类的引用指向子类的对象
多态访问成员的特点
成员变量:编译看左 运行看右
成员方法:编译看左 运行看左
静态成员方法:编译看左 运行也看左
多态的弊端:
不能访问子类特有的方法
解决方案:向下转型
关键字abstrsct 它可以修饰类 方法
1.抽象类中可以没有抽象方法 但是有抽象方法的类一定时抽象类
2.抽象类不能被实例化
3.要想实例化抽象类 必须用一个具体的子类继承他
注意;具体的子类继承抽象类 必须重写该抽象类中的所有的抽象方法
4.最终以抽象多态的形式进行实例化