Java 抽象类与final用法

时间:2022-11-05 02:47:39

 抽象类:

基于继承

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

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

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


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

 

栗子:

Java 抽象类与final用法Java 抽象类与final用法
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 + "。");
    }
}
父类
Java 抽象类与final用法Java 抽象类与final用法
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()+"犬。");
    }
}
Dog 类

 

Java 抽象类与final用法Java 抽象类与final用法
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()+"。");
    }
}
Penguin 类

 

 

Java 抽象类与final用法Java 抽象类与final用法
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/

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