Java 抽象类与final用法

 抽象类:

基于继承

抽象类和抽象方法的定义 父类的意义:  把子类共有的属性,抽取出来,达到代码的重用

抽象类不可被实例化 使用抽象类,限制实例化(只有派生类能实例化,父类不能实例化)  关键字:abstract  每个子类的实现不同

abstract也可用于方法---抽象方法  抽象方法没有方法体  抽象方法必须在抽象类里  抽象方法必须在子类中被实现,除非子类是抽象类(可以不实现) (抽象类没有方法体)

抽象方法的使用:  1)父类没有必要实例化,采用将父类定义成抽象类型  2)抽象类中的方法未必都是抽象方法     抽象方法必须在抽象类中  3)父类中定义方法,必须由子类实现,每个子类实现的内容不同,采用父类定义抽象方法  4)抽象类不可以被实例化  5)抽象方法必须由子类全部实现  6)抽象方法必须在抽象类中 子类重写抽象方法:  必须与父类抽象方法         名字相同  返回值相同  参数相同  访问权限相同

栗子:

package cn.jbit.epet.inherit2;

/**
 * 
 * @author: 房上的猫
 * 
 * @time: 下午3:51:59
 * 
 * 博客地址: https://www.cnblogs.com/lsy131479/
 *
 */

public class Pet {
    private String name = "无名氏";// 昵称
    private int health = 100;// 健康值
    private int love = 0;// 亲密度
    /**
     * 无参构造方法。
     */
    public Pet() {
        this.health = 95;
        System.out.println("执行宠物的无参构造方法。");
    }
    /**
     * 有参构造方法。
     * @param name  昵称
     */
    public Pet(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public int getHealth() {
        return health;
    }
    public int getLove() {
        return love;
    }
    /**
     * 输出宠物信息。
     */
    public void print() {
        System.out.println("宠物的自白:\n我的名字叫" + 
                this.name + ",我的健康值是" + this.health 
                + ",我和主人的亲密程度是" + this.love + "。");
    }
}
package cn.jbit.epet.inherit2;

/**
 * 
 * @author: 房上的猫
 * 
 * @time: 下午3:51:59
 * 
 * 博客地址: https://www.cnblogs.com/lsy131479/
 *
 */
 
 /*
  *狗狗类,宠物的子类。
  */

public class Dog extends Pet {
    private String strain;// 品种

    /**
     * 有参构造方法。
     * @param name   昵称
     * @param strain   品种
     */
    public Dog(String name, String strain) {
        super(name); //此处不能使用this.name=name;
        this.strain = strain;
    }
    
    public void setStrain(String strain) {
        this.strain = strain;
    }
    public String getStrain() {
        return strain;
    }
    
    public void print(){
        super.print();
        System.out.println("我是一只"+this.getStrain()+"犬。");
    }
}
package cn.jbit.epet.inherit2;

/**
 * 
 * @author: 房上的猫
 * 
 * @time: 下午3:51:59
 * 
 * 博客地址: https://www.cnblogs.com/lsy131479/
 *
 */

public class Penguin extends Pet {
    private String sex;// 性别
    /**
     * 有参构造方法。
     * @param name 昵称
     * @param sex 性别
     */
    public Penguin(String name, String sex) {
        super(name);
        this.sex = sex;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }    
    
    public void print(){
        super.print();
        System.out.println("我的性别是"+this.getSex()+"。");
    }
}
package cn.jbit.epet.inherit2;

/**
 * 
 * @author: 房上的猫
 * 
 * @time: 下午3:51:59
 * 
 * 博客地址: https://www.cnblogs.com/lsy131479/
 *
 */
 
 /*
  * 测试类,测试类的继承。
  */

public class Test {
    public static void main(String[] args) {
        // 1、创建宠物对象pet并输出信息
        Pet pet = new Pet("贝贝");
        //pet.print();
        // 2、创建狗狗对象dog并输出信息
        Dog dog = new Dog("欧欧", "雪娜瑞");
        dog.print();
        // 3、创建企鹅对象pgn并输出信息
        Penguin pgn = new Penguin("楠楠", "Q妹");
        pgn.print();
    }
}

final用法:

final修饰属性,方法和类

可以修饰类:最终版的类  不希望再被其他类继承

public finla class text{}

可以修饰方法:  方法不希望被重写

public class text{

        public final void text1(){}
}

可以修饰变量:(常量)最终版的属性值  属性不希望被修改

public class text{
            public final int a;
}

总结:  抽象类和抽象方法:    抽象类不能被实例化‘    可以有0~多个抽象方法    非抽象类必须重写父类的所有抽象方法  final修饰符:    修饰的类,不能被继承    修饰的方法,不能被子类重写    修饰的变量将编程常量,只能在初始化时进行赋值

(C) 房上的猫 。 保留所有权利。  https://www.cnblogs.com/lsy131479/

如需转载,请注明出处!!!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

扫码关注云+社区