java学习初探6之super final 抽象类

1.super
this:是引用,存储内存地址,指向当前对象。
super:不是引用,存储的不是内存地址,super指向的不是父类对象。super代表的是当前子类对象中的父类型特征。
这里写图片描述
什么时候使用super?
子类和父类中都有某个数据、方法,例如,子类和父类中都有name属性,如果在子类中想访问父类中name属性,需要使用super.name、super.getName()。
super可以用在什么地方?
super可以用在成员方法中,可以用在构造方法中。不能用在静态方法中(因为super是对象级)。
super用在构造方法中示例。


public class Account {
//
private String actno;
private double balance;
//constructor
public Account(){
    System.out.println("Account的无参方法执行");
}
public Account(String  actno,double balance){
    this.actno=actno;
    this.balance=balance;
}

public String getActno() {
    return actno;
}
public void setActno(String actno) {
    this.actno = actno;
}
public double getBalance() {
    return balance;
}
public void setBalance(double balance) {
    this.balance = balance;
}

}

/*
 * super 关键字用在构造方法中。super(实参);
 * 作用:通过子类的构造方法,调用父类的构造方法。
 * 语法规则:一个构造方法第一行,如果没有this();也没有显示的调用super();默认调用super().
 * 注意:super()的调用只能放在构造方法的第一行。super(...)和this(...)不能共存。
 * super(...)调用了父类中的构造方法,但是并不会创建父类对象。
 * 在java中,只要创建java对象,那么Object中的无参构造方法一定会执行。
 */
public class DebitAccount extends Account {
     //独特属性
    private double debit;
    //constructor
    public DebitAccount(){
        //默认调用super();父类无参构造方法
    }
    public DebitAccount(String actno,double balance,double debit){
        //通过子类的构造方法调用父类的构造方法,作用是给当前子类对象的父类型特征赋值。
        super(actno, balance);
        this.debit=debit;
    }
    public double getDebit() {
        return debit;
    }
    public void setDebit(double debit) {
        this.debit = debit;
    }
}
public class Test05 {

    public static void main(String[] args) {
        DebitAccount da=new DebitAccount();

    }

}

输出Account的无参方法执行。
2.final关键字
(1)final修饰的类,无法被继承。
(2)final修饰的方法,无法被覆盖。
(3)final修饰的局部变量,一旦赋值,不可再改变。
(4)final修饰的成员变量,必须显示(手动)的初始化,在构造方法调用结束前赋值。
(5)final修饰的成员变量一般和static联用。
//常量,java规范中要求所有常量“大写”
//常量:值,不可再改变的变量。
public static final double PI=3;
(6)final修饰的引用类型,该引用不能指向其他对象,但是该引用指向的对象的属性是可以修改的。
3.抽象类

/*
 * 1.如何定义抽象类?
 * class关键字前加abstract
 * 2.抽象类无法被实例化
 * 3.虽然抽象类无法被实例化,但是抽象类也有构造方法,是给子类创建对象用的。
 * 4.抽象类中可以定义抽象方法
 *      抽象方法的语法,在方法的修饰符列表中添加abstract关键字,并且抽象方法不能有主体
 *  应该以“;”结束,不能带有“{}”。
 * 5.抽象类中不一定有抽象方法,但是抽象方法一定出现在抽象类中。
 * 6.非抽象类继承抽象类,必须将抽象类中抽象方法覆盖,实现,重写。
 * 7.抽象类、抽象方法不能被final修饰,因为抽象类就是为子类服务的。也就是abstract和final不能共存。
 */
public abstract class AbstractTest {
    public AbstractTest() {
        System.out.println("AbstractTest");
    }
    public abstract void m1();//抽象方法
    public static void main(String[] args) {
        //AbstractTest abstractTest=new AbstractTest();
        AbstractTest abstractTest=new BB();//多态

    }
}
class BB extends AbstractTest{
    public void m1(){}//重写m1
    BB(){
        //super();父类的构造方法虽然调用了,但是没有创建父类对象。
        System.out.println("BBBBBB");
    }
}

输出:
AbstractTest
BBBBBB

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值