多态、抽象类、接口

什么是多态,多态的成员访问特点?

多态:一个事物在不同时刻体现的不同形态
    前提条件:
        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 ;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值