Java面向对象三大特性——继承

继承

共性抽取

在继承关系 中,子类就是一个父类,也就是说,子类可以被当作父类看待

例如:父类是员工,子类是讲师,“讲师就是员工”

定义父类:(普通类的定义是一样的)

public class 父类名称{

//……

}

定义子类格式:

public class 子类名称 extends 父类名称{

//……

}

父子类中成员变量的访问顺序

在父子类的继承关系中,如果成员变量重名,则创建子类对象时,访问有两种方式

直接通过子类对象访问成员变量

等号左边是谁,就优先用谁,没有则向上找

间接通过成员方法访问成员变量

该方法属于谁,谁就优先使用,没有则向上找

局部变量:直接写变量名

本类中的成员变量:this.成员变量名

父类的成员变量:super.成员变量名

public class Son extends Father{
    int num=200;
​
    public void methodSon(){
        int num=30;
        System.out.println(num);
        System.out.println(this.num);
        System.out.println(super.num);
    }
​
}

继承中成员变量访问的特点

在父子类的继承关系中,如果成员变量重名,则创建子类对象时,访问方式有两种

直接通过子类对象访问成员变量等号左边是谁,就优先用谁,没有则向上找

间接通过成员方法访问成员变量

继承中成员方法访问的特点

在父子的继承关系中,创建子类对象,访问成员方法的规则:

创建的对象是谁,就优先用谁,如果没有则继续向上找

  • 注意事项:

  • 无论是成员变量还是成员方法,如果没有都是向上找父类,绝对不会向下找子类的

public class Test {
    public static void main(String[] args) {
//        Father father = new Father();
//        father.methodFather();
//        father.method();
​
        Son son = new Son();
        son.methodSon();
        son.methodFather();
        son.method();
    }
​
    void method(){
​
    }
}

super关键字

super关键字用来访问父类内容,而this关键字用来访问本类内容

1.在本类的成员方法中,访问本类的成员变量

2.在本类的方法中,访问本类的另一个成员方法

3.在本类的构造方法中,访问本类的另一个构造方法

继承关系中,构造方法的访问特点:

1.子类构造方法中,有一个默认隐含的【super();】,所以说,先调用父类的构造,后执行子类的构造

2.子类构造可以通过【super】关键字来调用父类的内容

3.super的父类构造调用,必须是子类构造中的第一句【重要】,不能一个子类构造调用多次super构造

【总结】:

子类必须调用父类的构造方法,不写赠送super()

public class Son extends Father{
​
    int num=20;
​
    public Son(){
//        super();
        System.out.println("子类的无参构造!");
    }
​
    public Son(String name){
        this();
//        super();  可以省略
        System.out.println("子类的有参构造!");
//        super();  //错误写法
    }
​
    public void method(){
        int num=30;
        System.out.println(num);
        System.out.println(this.num);
        System.out.println(super.num);
        super.method();
    }
}

方法的重写

重新与重载的比较

重写(Override):方法的名称一样,参数列表【一样】,覆盖、复写

重载(Overload):方法的名称一样,参数列表【不一样】

方法的覆盖重写的特点:创建的是子类对象,则优先用子类方法

方法重写的注意事项:

1.必须保证父子类之间方法的名称相同,参数列表也相同

@Overrider:写在方法前边,用来检验是否有效正确的覆盖重写,

起到安全检测的作用。注解:annotation

2.子类方法的返回值必须【小于等于】父类方法的返回值范围

提示:java.lang.String,,父亲类:java.lang.Object

3.子类方法的权限必须【大于等于】父类方法的权限修饰符

提示:public > protected >默认> private

工具类的使用

日期和时间类

java.util.Date:表示日期和时间类

类Date表示特定的瞬间,精确到毫秒

毫秒:千分之一秒,1000毫秒=1秒

把日期转换为毫秒:

当前的时间:2021-07-22

时间的原点(0毫秒):1970-01-01 00:00:00(英国格林)

1626942611592

就是计算当前日期到时间原点之间一共经历了多少毫秒(一个long)

把毫秒值转换为日期:

1天=246060*1000=86400 000毫秒

注意:中国属于东八区,会把时间增加8个小时

1970-01-01 08:00:00

DateFormat类

  • java.text包中是时间/日期格式化子类【抽象类】,通过这个;类帮我们完成日期和时间的格式化

Date类转字符串:

字符串转Date类:

* Date类转字符串:
 *
 * 字符串转Date类:
 */
public class Demo1Date {
    public static void main(String[] args) throws ParseException {
        //获取当前系统时间距离1970-01-01 08:00:00一共经历了多少毫秒
//        System.out.println(System.currentTimeMillis());
        System.out.println(24*60*60*1000);
//        Date date = new Date();
//        long time = date.getTime();
//        System.out.println(date);
//        System.out.println("2021-07-22");
//        System.out.println(time);
​
        String dateStr="2002-01-01";
​
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
​
        Date parse = sdf.parse(dateStr);
        System.out.println(parse);
    }
}

字符串转日期:

  • Date parse(String str):

  • 注意:

  • parse()方法声明了一个异常机制叫做ParseException

  • 如果字符串和构造方法的模式不一样,那么程序就会抛出异常

 /**
     * 字符串转日期:
     * Date parse(String str):
     * 注意:
     *  parse()方法声明了一个异常机制叫做ParseException
     *  如果字符串和构造方法的模式不一样,那么程序就会抛出异常
     */
public void strFormatDate(){
    public static void main(String[] args){
        String dateStr="2002-01-01";
        Student student = new Student();
​
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
​
        try {
            Date date = sdf.parse(dateStr);
            student.setBrithDate(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
​
​
    }
}
​

日历类

java.util.Calendar:日历类

Calendar类是一个抽象类,里边提供了很多操作日历字段的方法

Calendar类无法直接创建对象,里边有一个静态的方法叫getInstance(),

该方法可以直接返回Calendar类的子类对象

public class Demo2Calendar {
​
    public static void main(String[] args) {
​
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        System.out.println(year);
        int month = c.get(Calendar.MONTH);//西方的月份0-11 东方1-12
        System.out.println(month);
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(day);
        int date = c.get(Calendar.DATE);
        System.out.println(date);
​
    }
}
​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值