什么是多态,多态的成员访问特点?
多态:一个事物在不同时刻体现的不同形态
前提条件:
1)必须继承关系
2)必须存在方法重写
3)必须父类引用指向子类对象
Fu f = new Zi() ;
成员访问特点:
1)成员变量:编译看左,运行看左
2)成员方法:(非静态):编译看左,运行看右,(存在方法重写)
3)静态的方法:不算方法重写,跟类相关(编译看左,运行看左)
4)构造方法:分层初始化(先父类,在子类)
多态的向上转型和向下转型
多态的向上转型:多态的第三个前提条件--->父类引用指向子类对象
格式:Fu fu = new Zi() ;
多态的弊端:不能访问子类的特有功能
可以使用向下转型:
将父类的强转强转转换为子类引用
Zi zi = (Zi)fu;
多态的好处
提高代码的复用性---继承来保证
提高代码的扩展性---多态保证(后期使用最多):父类引用指向子类对象 Fu fu = new Zi() ;
什么是抽象类,抽象类如何实例化
一般情况:将一些共性内容抽取到独立的类中,并且有些功能仅仅给出声明,不具体实现,具体的实现通过子类进行实现,当前这个方法就是抽象方法--->必须为抽象类(Animal,Person,Buble:灯泡,Fruit...)
抽象类---->强制子类必须完成的事情(重写抽象类中的所有抽象方法!)
抽象类的最大特点:不能实例化,不能new ,只能通过子类进行实例化
抽象的父类指向子类对象--->抽象类多态 :Fu fu = new Zi() ; (Fu类是抽象类)
抽象类的子类如果为抽象类,那么一定会存在最具体的子类,否则不能实例化了
抽象类的成员特点
抽象类中:
成员变量:可以是变量,也可以是常量!
成员方法:即可是抽象方法,必须携带abstract关键字,也可以是非抽象方法
构造方法:存在无参/有参构造方法----对数据进行初始化
一个类中没有抽象方法,这个类定义为抽象类的意义?
不想让当前这个类进行实例化,如何实例化呢
它可能提供一些静态功能,静态功能的返回值类型是它本身举例:
jdk提供日历类 Calendar 抽象类
静态功能---返回值就是它本身
public static Calendar getInstance() {
//调用内部的其他方法
}
接口和抽象类的区别?
1)成员的区别
抽象类:
成员变量:既可以是变量,也可以是常量
成员方法:可以存在抽象方法(必须携带abstract关键字),也可以有非抽象方法
构造方法:存在无参/有参构造方法,---目的需要给数据进行初始化,分层初始化
接口:
成员变量:只能是常量,存在默认的修饰符public static final修饰
成员方法:只能是抽象方法:存在默认的修饰符 public abstract
构造方法:没有
2)关系的区别
类与类之间: 继承关系,只支持单继承,不支持多继承,但是可以多层继承
类与接口: 实现关系,一个类继承另一个类的同时可以实现多个接口,中间逗号隔开
接口与接口: 继承关系,可以支持单继承,也可以支持多继承,多层继承...3)设计理念
抽象类:----->强制子类必须完成的事情,由于存在继承关系,体现的是一种"is a"的关系!
接口-------->体现某个事物额外的功能,谁实现该接口就具备该功能,体现的是一种"like a"的关系!Java面向对象---->面向接口编程
先去定义接口
需要根据一些相关的字段(参数)去接口中功能
abstract和哪些关键字冲突
final (最终的),static (静态),private(私有的)
冒泡排序和选择排序的思想以及核心代码体现
/*
冒泡:两两比较,较大的值往后放,第一次比较完毕,最大值出现在最大索引处!
依次这样比较...
*/
//核心代码体现
for(int x = 0 ; x <arr.length-1 ; x ++){
for(int y = 0 ; y < arr.length-1-x ; y++){
//判断
if(arr[y] > arr[y+1]){
int temp = arr[y] ;
arr[y] = arr[y+1] ;
arr[y+1] = temp ;
}
}
}/*
选择排序: 依次比较:使用0角标对应的元素依次后面角标对应的元素进行对比,小的往前放,第一次比较完毕,最小值出现在最小索引处...依次这样比较..
后期:在集合中一会选择排序的思想:
List集合去重 ---List集合可以存储重复元素,利用选择排序思想
*/for(int x = 0 ; x < arr.length-1; x ++){
for(int y = x + 1; y< arr.length ; y ++){
//判断
if(arr[y] < arr[x]){
int temp = arr[x] ;
arr[x] = arr[y] ;
arr[y] = temp ;
}
}
}