小白学Java代码:抽象类

抽象类

package com.jian.demo10;

public abstract class Pet { //抽象的宠物父类
}
package com.jian.demo10;

public class Dog extends Pet {
}
package com.jian.demo10;

public class Test {
    public static void main(String[] args) {
        /*
            注意:1.创建宠物对象时,这个对象得到的不是猫、狗、鸟......也就是说,当创建宠物对象时,并没有明确得到的是具体哪个宠物
                 2.原因:宠物类是父类,也就是说一般创建子类对象,因此就可以将父类编写为抽象类
                 3.抽象类特点:
                    3.1抽象类使用abstract关键字
                    3.2抽象类不能创建对象,也就是说抽象类也是多态的一种形式
         */
//        Pet p = new Pet();
        Pet p = new Dog(); //构成多态,也就是向上转型或者自动类型转换
    }
}
练习:使用面向对象完成,实现宠物吃东西
分析得到:
宠物类
    方法:吃
猫类 继承 宠物父类
    重写父类吃的方法
狗类 继承 宠物父类
    重写父类吃的方法
鸟类 继承 宠物父类
    重写父类吃的方法
鱼类 继承 宠物父类
    重写父类吃的方法
........ 继承 宠物父类
    重写父类吃的方法
package com.jian.demo11;

/**
 * 宠物类
 *     方法:吃
 *
 */
public abstract class Pet {
    public abstract void eat();
}
package com.jian.demo11;

public class Dog extends Pet {
    @Override
    public void eat() {
        System.out.println("小狗正在吃狗粮.....");
    }
}
package com.jian.demo11;

/**
 * 猫类 继承 宠物父类
 *        重写父类吃的方法
 * 
 */
public class Cat extends Pet {
    @Override
    public void eat() {
        System.out.println("小猫正在吃鱼......");
    }
}
package com.jian.demo11;

public class Bird extends Pet {
    @Override
    public void eat() {
        System.out.println("小鸟正在吃虫子......");
    }
}

 

package com.jian.demo11;

public class Test {
    public static void main(String[] args) {
        /*

            注意:1.不同的宠物吃的东西不一样,因此需要在子类中重写父类吃的方法
                 2.当创建子类对象时,再调用吃的方法,则优先调用子类重写以后的方法,也就是说父类吃的方法没有使用到,但是不能删除,原因:1.更改题意,2.父类中没有吃的方法子类也不能重写
                   则就可以将父类的方法编写为抽象方法
                 3.抽象方法特点
                    3.1抽象方法使用abstract关键字
                    3.2抽象方法必须没有方法体,也就是大括号不需要编写,直接以英文分号作为结尾
                    3.3抽象方法必须编写在抽象类中
                    3.4当子类继承抽象类时,则必须在子类中重写抽象类中所有的抽象方法,否则子类也是抽象类
                       大多数情况下子类重写抽象类中的抽象方法
                    3.5抽象类不能创建对象,其实抽象类也是多态的一种形式
         */

        Pet p = new Dog(); //构成多态,也就是向上转型或者自动类型转换
        p.eat(); //优先调用子类重写以后的方法
        p = new Cat(); //构成多态,也就是向上转型或者自动类型转换
        p.eat(); //优先调用子类重写以后的方法

        p = new Bird(); //构成多态,也就是向上转型或者自动类型转换
        p.eat(); //优先调用子类重写以后的方法
    }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值