Java初学笔记--面向对象3

一、抽象方法和抽象内容
抽象方法:
--包含抽象方法的类必须是抽象类
--由abstract修饰
只有方法的定义,没有具体的实现(连{}都没有)
抽象类:
--包含抽象方法的类必须是抽象类
--抽象类不能被实例化(new对象)但是可以创建数组
--抽象类不能单独存在
--抽象类是需要被继承的,派生类直接继承会报错,常规的两种处理办法:
1.也声明为抽象类----------一般很少这么做
2.必须重写所有抽象方法---变不完整为完整(常见做法)
--抽象类的意义:
1.封装共有的属性和行为,实现代码复用
2.可以包含抽象方法,为所有派生类统一入口(名字统一)强制必须重写
二、接口:
是一种引用类型
由interface定义
只能包含抽象方法(常量、默认方法、静态方法、私有方法)默认接口内的所有方法都是抽象的
 

package ooday03;

/**
* 接口
 */
public interface Inter {
    abstract void show();
    void test();//接口中的方法默认都是抽象的,前面默认有abstract
    
    //void say(){}//编译错误,抽象方法不能有方法体
}

--不能被实例化

    public class InterfaceDemo {
         public static void main(String[] args) {
             //Inter o = new Inter(); //编译错误,接口不能被实例化
         }
     }


--接口是需要被实现的 实现类  必须重写接口中的所有抽象方法
 -注意 重写接口中的抽象方法时 必须加public

    interface Inter {
           abstract void show();
           void test(); //接口中的方法默认都是抽象的,前面默认有abstract
           //void say(){} //编译错误,抽象方法不能有方法体
       }
       class InterImpl implements Inter {
           public void show(){ //重写接口中的抽象方法时,必须加public
           }
           public void test(){
           }
       }


--一个类可以实现多个接口。若又继承又实现,应该先继承后实现

//演示接口的多实现
     interface Inter1{
         void show();
     }
     interface Inter2{
         void test();
     }
     abstract class Aoo{
         abstract void say();
     }
     class Boo extends Aoo implements Inter1,Inter2{
         public void show(){}
         public void test(){}
         void say(){}
     }


--接口可以继承接口

三、引用类型数组:
数组元素为引用类型的数组,即为引用类型数组
<代码段>
与基本类型数组只有两点区别:
1.给引用类型数组的元素赋值是,需要new个对象
2.访问引用类型数组的元素的属性/行为时,需要打点访问

    public class RefArrayDemo {
         public static void main(String[] args) {
             Dog[] dogs = new Dog[3];
             dogs[0] = new Dog("小黑",2,"黑");
             dogs[1] = new Dog("小白",1,"白");
             dogs[2] = new Dog("小灰",3,"灰");
             System.out.println(dogs[0].name); //输出第1只狗狗的名字
             dogs[1].age = 4; //修改第2只狗狗的年龄为4岁
             dogs[2].swim(); //第3只狗狗在游泳
             for(int i=0;i<dogs.length;i++){ //遍历dogs数组
                 System.out.println(dogs[i].name); //输出每只狗狗的名字
                 dogs[i].eat(); //每只狗狗吃饭
             }
     
             Chick[] chicks = new Chick[2];
             chicks[0] = new Chick("小花",1,"花");
             chicks[1] = new Chick("大花",2,"白");
             for(int i=0;i<chicks.length;i++){ //遍历chicks数组
                 System.out.println(chicks[i].name);
                 chicks[i].layEggs();
             }
     
             Fish[] fish = new Fish[4];
             fish[0] = new Fish("小金",2,"金");
             fish[1] = new Fish("大金",4,"白");
             fish[2] = new Fish("小绿",1,"绿");
             fish[3] = new Fish("小红",3,"红");
             for(int i=0;i<fish.length;i++){ //遍历fish数组
                 System.out.println(fish[i].color);
                 fish[i].drink();
             }
     
             /*
             //声明Dog型数组dogs,包含3个元素,每个元素都是Dog类型,默认值为null
             Dog[] dogs = new Dog[3];
             //声明Chick型数组chicks,包含3个元素,每个元素都是Chick类型,默认值为null
             Chick[] chicks = new Chick[3];
             //声明Fish型数组fish,包含2个元素,每个元素都是Fish类型,默认值为null
             Fish[] fish = new Fish[2];
              */

补充:

1.设计规则:
将派生类所共有的属性和行为,抽到超类中-----抽共性
若将派生类的行为/代码都一样,设计为普通方法
若派生类的行为/代码不一样
2.接口间继承
类和类-------------------extends
接口和接口--------------extends
接口和类-----------------implement

3.null:表示空没有指向任何对象
若引用的值为null,则该引用不能再进行任何点操作了,若操作则发生NullPointerException空指针异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值