java学习笔记-21/9/3 面向对象

1、面向对象定义 

对象和类是java中最基本的两个概念,可以说撑起了面向对象编程(OOP)的一片天。

 

创建对象时需要用到new 关键字。

 初始化对象(给字段赋值) :最标准的做法是通过构造方法初始化,直接在new的时候把参数传递过去。

2、抽象方法

 没有方法体的方法被称为抽象方法,它总是在抽象类中声明,这意味着如果类有抽象方法的话,这个类就必须是抽象的,可以使用abstract关键字创建抽象方法和抽象类。

java接口和java抽象类最大的区别就在于抽象类可以提供某些方法的部分实现,而接口不可以(就是接口中只能定义方法,而不能有方法的实现,而在抽象类中则可以既有方法的具体实现,也可以没有具体实现的抽象方法)

如果向一个抽象类中加一个新的具体方法(注意不是抽象方法),那么它的所有子类就能一下子得到这个新方法,而接口做不到这一点,如有向接口中加一个新方法,则所有实现这个接口的类就无法通过编译了,因为你必须让它的每一个实现类在实现这个方法才行。 

package com.example.rookie.abstractdemo;

/**
 * 抽象方法:方法前加上abstract关键字,去掉大括号,直接分号结束。
 * 抽象类:抽象方法所在的类,必然是抽象类,在class前加上abstract即可。
 * <p>
 * 如何使用抽象类和抽象方法:
 * 1、不能直接创建  new抽象类对象
 * 2、必须使用一个子类来继承抽象父类
 * 3、子类必须重写抽象父类中的所有的抽象方法(普通类),也可以无须重写所有方法(抽象类)
 * 4、创建子类对象进行使用
 * <p>
 * 动物抽象类
 *
 * @author 
 * @date 2021/9/3 15:26
 */
public abstract class Animal {

    public abstract void eat();

    public abstract void sleep();


    public Animal() {
        System.out.println("父类构造方法执行:");
    }
}
package com.example.rookie.abstractdemo;

/**
 * 未重写父类Animal抽象类的sleep抽象方法,编译无法通过而报错
 * 解决办法:将子类Cat也写成抽象类即可运行
 *
 * @author 
 * @date 2021/9/3 15:28
 */
public abstract class Cat extends Animal {

    @Override
    public void eat() {
        System.out.println("猫爱吃鱼");
    }

    public Cat() {
        System.out.println("子类构造方法执行!");
    }

}
package com.example.rookie.abstractdemo;

/**
 * 未重写父类Animal抽象类的sleep抽象方法,编译无法通过而报错
 * 解决办法:将子类Cat也写成抽象类即可运行
 *
 * @author
 * @date 2021/9/3 16:54
 */
public abstract class Dog extends Animal {

    @Override
    public void eat() {
        System.out.println("狗爱吃肉");
    }

    public Dog() {
        System.out.println("子类构造方法执行!");
    }


    public void run() {
        System.out.println("这是一个普通方法!");
    }
}
package com.example.rookie.abstractdemo;

/**
 * 子类
 *
 * @author
 * @date 2021/9/3 15:33
 */
public class CatOne extends Cat {
    @Override
    public void sleep() {
        System.out.println("呼呼大睡");
    }

}
package com.example.rookie.abstractdemo;

/**
 * 子类
 *
 * @author
 * @date 2021/9/3 16:58
 */
public class DogOne extends Dog {
    @Override
    public void sleep() {
        System.out.println("酣然大睡!");
    }
}
package com.example.rookie.abstractdemo;

/**
 * 测试类
 *
 * @author
 * @date 2021/9/3 15:41
 */
public class DemoMain {

    public static void main(String[] args) {
        CatOne catOne = new CatOne();//普通类,可以直接new
        catOne.eat();
        catOne.sleep();
        System.out.println("=================");
        DogOne dogOne = new DogOne();
        dogOne.eat();
        dogOne.sleep();
        dogOne.run();//是dog抽象类新加的有具体实现的方法
    }
}

以上代码的运行结果如下(当在抽象类中新加具体的实现方法时,比子类无须更改就可以直接使用这个方法,而在接口里新增方法,则需要增加实现才行):

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值