day_10 This、Static、封装、继承、父类、覆写

1.This
    1.是什么:是每个对象中,保存自身内存地址的一个引用类型变量
            this就表示当前对象
    
    2.能做什么:
        1.在成员方法或者构造方法中,区分同名的成员变量和局部变量
            this.xxx
        2.用在构造方法中,重载调用当前类中其他构造方法,但是必须写在构造方法第一行
            this(xxx)
        3.return this 返回当前对象的内存地址,可以链式调用

    3.怎么用:
        1.区分静态和局部,成员和局部
            静态变量可以和局部变量同名,局部变量优先级更高,使用类名区分同名的静态变量和局部变量
                System.out.println(a);
                System.out.println(类名.a);
            成员变量可以和局部变量同名,局部变量优先级更高,可以使用this区分同名的成员变量和局部变量
                
            int d = 2;
            public void m1(){
                int d = 3;
                System.out.println(d);
                System.out.println(this.d);
            }
            
        2.重载调用构造方法:
            调用当前类的指定构造方法。但是,该写法只能写在构造方法中,并且必须是第一行

                public MyDate(){
                    this(1970.1.1);
                }
                public MyDate(int year,int month,int day){
                    this.year = year;
                    this.month = month;
                    this.day = day;
                }
        
        3.链式调用:
            public class This_02{ 
                public static void main(String[] args){
                    This_02 t = new This_02();
                    t.m1();
                    t.m2();
                    t.m1().m2();
                }
            }
    
    4.注意
        1.this不能出现在静态上下文中。      无法从静态上下文中引用非静态变量。

2.static

    1.是什么:
        修饰符,关键字,用来区分静态变量
    
    2.能做什么:
        1.在类体中使用static修饰的变量是静态变量
        2.用static修饰的方法是静态方法
        3.还可以使用static定义静态语句块

    3.静态语句块:
        等同于静态方法,自动执行,在程序加载阶段执行完成,并且只执行一次
        由于执行时机在main方法之前,且只执行一次,所以非常适合做一些初始化工作
        静态变量和static是同等优先级,多个static语句块从上往下执行
        访问一个类的静态属性的时候,这个类才会加载

    4.实例语句块:
        等同于成员方法,没有static修饰的语句块就是成员语句块

        创建对象后立即执行,每创建一个对象,就执行一次,并且在构造方法之前
    
    输入:public class Static{
                System.out.println("实例语句块1");
                System.out.println("实例语句块2");
                
                Static{
                    System.out.println("静态语句块");
                }
               
                Static(){
                    System.out.println("构造方法");
                }

            public static void main(String[] args){
                System.out.println("main方法");
                new Static();
                new Static();
            }
         }

    输出: 静态语句块
           main方法
           实例语句块1
           实例语句块2
           构造方法
           实例语句块1
           实例语句块2
           构造方法

3.封装
    1.Package:软件包机制
        1.主要解决了命名冲突问题,在类名前加命名空间
        2.完整的类名是带有包名的,包名.类名才是这个类的名字
        3.package语句必须出现在java源文件的第一行
        4.package语句是规定编译后的class文件保存的位置,和源文件无关
        5.命名规则: 一般采用公司域名倒叙
    
    2.Import
        1.import java.util.*;   表示导入util下所有类

        2.import语句用于把当前类中需要的其他类载入
          必须出现在class语句之上,package语句之下
          java.lang.*:该包下所有类均为系统核心类,使用时不需要导入

          只要不在同一包内,必须通过包名.类名才能找到该类

          注意:按空格或者回车会自动导包,如果程序没问题但报错,可以查看是否导包错误

    3.权限控制
        public:公共的,哪里都能访问
        private:只能在当前类访问
        default:不屑权限控制修饰符,默认为default,同包中即可访问
        protected:受保护的,继承权限,要么同包要么有继承关系

4.继承
    1.是什么:就是在已有的类中派生出新的类,新的类能吸收已有类的属性和行为
             Java中只支持单继承,不支持多继承,并且继承可以传递
             一个类只能继承一个父类,但一个类可以被很多子类继承

    2.能做什么:
        继承目的:代码复用,提高效率,若父类满足不了子类需求,可以进行覆写,可以使用多态

        如果一个类没有显示继承一个类,那么该类默认继承Object
        java.lang.Object是java中提供的根类,所有类都直接或简介的继承这个类

    3.怎么用:
        语法: class 类名 extends 父类名 {类体}

        public class SubClass extends SupClass{
            public void m1(){
                System.out.println("我是子类m1");
            }
        }
5.Super
    1.是什么:
        代表了父类的特征

    2.能做什么:
        1.用在成员方法和构造方法中,区分父类子类之间同名的方法和变量
                super.xxx   (类似于 this.xxx)
        2.用在子类构造方法中,调用指定的父类构造方法
                super(xxx);
            如果在子类构造方法中没有显示出现super()也没有出现this(xxx)则默认有一个super()调用父类无参构造
            并且super(xxx)必须出现在子类构造方法第一行,所以this(xxx)和super(xxx)不能同时出现

    3.怎么用:
        1.区分父类子类同名的属性

        2.调用父类的构造方法

    4.注意:
            如果在子类构造方法中,没有显示出现super() 也没有出现 this(xxx)
        则默认有一个super() 调用父类无参构造,
            并且 super(xxx) 必须出现在子类构造方法 第一行  
        所以 this(xxx) 和 super(xxx) 不能同时出现,
            因为构造方法第一行有super()调用父类构造,所以 
        某一个类如果构造方法私有化了,那么该类不会再被继承。

6.覆写/重写
    1.是什么:
        写一个和父类一样的方法,但是功能不一样
            1.方法名.返回值.参数列表 必须和父类一致
            2.不能比原方法拥有更低的访问权限
            3.不能比原方法拥有更宽泛的异常

    覆写特指成员方法,也就是只有成员方法可以覆写

    2.应用场景:
        当父类功能无法满足子类需求的时候,进行覆写

        @Override : 是源码注解,在编译的时候会判断该方法是否为覆写的方法,错了就会报错
            该注解再编译为class文件后就会被去掉

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值