2020-08-14 继承and抽象

继承(super、this)

super的三种用途:

super的三种用途
        1. 可以访问父类的成员变量。
            super.成员变量
        2. 可以访问父类的成员方法
            super.成员方法()
        3. 可以访问父类的构造方法
            super();

this的三种用途:

this的三种用途:
        1. 可以访问本类中的成员变量。
            this.成员变量
        2. 可以访问本类中的成员方法
            this.成员方法()
        3. 可以访问本类中的构造方法。
            this(参数);
            如果this调用构造方法,也必须放在第一行

Employee

/*
    我们可以将多个类(子类)中的共性向上抽取,抽取到另一个类(父类)中。
    子类继承父类,会自动拥有父类所有的成员(私有成员也能继承,不过无法直接访问)

    继承的格式:
        public class A {}
        public class B extends A {}
        上面代码表示B类继承了A类,B是子类,A是父类,B类会自动拥有A类所有的成员。


 */
public class Employee {
    //姓名
    String name;
    //年龄
    int age;
}


Teacher
/*
    讲师类
 */
public class Teacher extends Employee{
    //讲课方法
    public void teach() {
        System.out.println("讲师讲课");
    }
}

Assistant
/*
    助教类
*/
public class Assiatant extends Employee{
    //辅导方法
    public void help() {
        System.out.println("助教辅导");
    }
}

DemoTest
/*
    测试类
 */
public class Demo01Test {
    //定义main方法
    public static void main(String[] args) {
        //创建讲师对象
        Teacher t = new Teacher();
        //给讲师对象的属性赋值
        t.name = "小明老师";
        t.age = 30;
        System.out.println("姓名:" + t.name + ",年龄:" + t.age);
        //调用方法
        t.teach();

    }
}

匿名对象

匿名对象顾名思义就是没有名字的对象,如果我们创建了一个对象但是在左边没有用变量接收这个对象,那么就是一个匿名对象。
比如创建对象的格式:
	数据类型 对象名 = new 数据类型();
如果上面格式只写了右边,没有写左边,那么就是一个匿名对象。

好处:
	匿名对象可以稍微简化我们的操作。

匿名对象的使用场景:
    1. 如果某个对象我们只需要用一次,那么可以使用匿名对象【匿名对象没有接受,用完之后就找不到了】
    2. 当做方法参数进行传递。

继承中成员变量的特点:

    继承关系中成员变量的访问特点:
        通过子类访问成员,子类没有,会向上找父类。
        通过父类访问成员,父类没有,不会向下找子类。

    父类和子类成员变量同名时的访问特点(了解):
        直接访问(通过子类对象直接访问):
            使用的是子类自己的成员。
        间接访问(通过方法的方式去访问)
            调用的是哪个类中的方法,访问到的就是哪个类中的成员变量。

继承中成员方法的特点:

继承中成员方法的访问特点
        如果子类中的成员方法和父类中的成员方法同名,那么通过子类对象访问成员方法,访问的是子类中定义的成员方法。 如果子类中出现了和父类一模一样的方法,那么这个就叫做方法的重写。

重写和重载的区别:

        重载: 方法名,参数列表不同。

        重写: 在子类中出现了和父类一模一样的方法。

方法重写注意事项:

方法重写的注意事项:
        1. 子类在重写父类方法时,参数列表必须相同。
        2. 子类重写父类方法时,子类方法的权限一定要大于等于父类方法的权限【了解】
                public > protected > 默认 > private
                默认权限指的是省略不写,如果省略权限修饰符,那么方法就是默认权限。
        3. 私有的方法不能被重写

    一般来说,方法重写时,权限修饰符,返回值类型都是一致的。

继承中的构造方法:

 在继承关系中构造方法的注意事项:
        1. 构造方法不能继承。
        2. 创建子类对象时会先执行父类的构造方法,然后执行子类的构造方法。 原因是因为在子类构造方法的第一句有一个隐藏的super(),是在调用父类的空参数构造方法
        3. 我们也可以使用super关键字手动调用父类的构造方法。
            super(参数)
        4. 如果使用super调用构造方法,那么只能放在第一行。

抽象类的定义和使用(举例):

动物类。
    动物有吃的行为,但是动物吃什么,我们是说不清的, 这种说不清道不明的方法,我们可以定义成抽象方法。

    抽象方法:
        使用abstract修饰,没有方法体。
    抽象方法格式:
        public abstract 返回值类型 方法名(参数);

    抽象类:
        抽象方法存在的类必须是一个抽象类。抽象类就是使用abstract修饰的类。

    抽象类的格式:
        public abstract class 类名 {}

    抽象类的使用:
        1. 抽象类不能创建对象。
        2. 抽象类是给子类用的,我们要定义一个子类去继承抽象类。
        3. 重写抽象类中的所有的抽象方法。
        4. 创建子类对象,通过子类对象调用方法。

抽象类的注意事项:

抽象类的注意事项:
        1. 抽象类不能创建对象
        2. 抽象类中也是有构造方法的,抽象类中的构造方法是给子类用的。
        3. 抽象类中可以有抽象方法,也可以有非抽象的方法。
           抽象方法所在的类必须是一个抽象类。
        4. 一个普通类在继承抽象类时,必须重写这个抽象类中所有的抽象的方法。
           一个抽象类在继承抽象类时,可以不重写抽象类中的抽象方法。
        5. 抽象类的目的是为了让子类继承,体现的是模板思想。

模板方法模式:

模板方法模式
        将固定的流程定义在父类中,不同的地方使用抽象方法,让子类继承重写

final关键字(final修饰类,方法,变量)

如果final修饰类,这个类不能被继承,但是这个类可以继承其他类。
如果final修饰方法,这个方法不能被重写,但是可以被子类继承使用。
如果final修饰变量,这个变量的值不能被改变,从效果上看,这个变量也就变成了常量。
    如果final修饰的是局部变量,那么变量的值只能赋值一次,一旦赋值就不能更改了。
    如果final修饰的是成员变量,该变量也是只能赋值一次,一旦赋值不能更改。
    final修饰的成员变量,必须在创建对象之前完成赋值(可以直接赋值,也可以构造方法中赋值) 

常量的命名规范:所有字母都大写,如果有多个单词,多个单词之间使用下划线隔开。比如: AAA_BBB_CCC

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值