JavaSe基础2022年12月08日学习内容

JavaSe-2022-12-08面向对象

每日一句:闻鸡起舞,成就拼搏劲旅师;天道酬勤,再现辉煌王者风。

学习内容:封装、static静态修饰符、重写(覆盖)、向上造型

  • 封装

    • Java的封装,就相当于把汽车的零件组装起来变成了一辆车,你不知道他的具体结构但是你可以使用它;

    • 我们在程序设计的过程中要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己来完成,不允许外部干涉,低耦合:就是, 仅暴露少量的方法给外部使用

    • //get/set方法 封装一个类
      public class Person {
          String name;
          private int age; //1.使用private私有属性
          //2.提供公开的访问方法get/set
          public String getName() { //获取属性值的方法
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public int getAge() {
              return age;
          }
      
          public void setAge(int age) {  //设置属性值
              //加入逻辑判断
              if(age < 0 || age > 150){
                  System.out.println("年龄不合理");
                  return; //终止方法的运行
              }
              this.age = age;
          }
      
          public Person() {
          }
      
          public Person(String name, int age) {
              this.name = name;
              this.age = age;
          }
      }
      
      //测试类
      public class PersonTest {
          public static void main(String[] args) {
              Person p = new Person();
      //        p.age = 100000; //不合理
              p.setAge(100);
              System.out.println(p.getAge());
          }
      }
      
  • static静态修饰符

    • 修饰成员变量,使之成为静态变量,访问静态变量建议使用类名.访问

    • 修饰成员方法,称为静态方法

    • 修饰代码块,静态代码块

    • 修饰类,静态内部类

      • public class StaticTest {
            public static void main(String[] args) {
                Too t1 = new Too();
                Too t2 = new Too();
                t1.a++;
                Too.b++;
                t2.a++;
                Too.b++;
                System.out.println(t1.a);//1
                System.out.println(t1.b);//2
                System.out.println(t2.a);//1
                System.out.println(t2.b);//2
            }
        }
        
        class Too extends Father{
            int a; //成员变量 每个对象自己独一份
            static int b; //静态变量 所有对象共用一份
            //当存在父子类,且含有构造方法,普通代码块,静态代码块,执行的顺序如下
            //  父类静态代码块->子类静态代码块->父类代码块->父类构造方法
            //  ->子类代码类 ->子类构造方法
            Too(){
                super();
                System.out.println("我是构造方法");//7
            }
            //每创建一个对象前执行一次所有代码块
            {
                System.out.println("我是代码块1");//4
            }
            {
                System.out.println("我是代码块2");//5
            }
        //    静态代码块在类加载的时候就执行且只能执行一次
           static {
               System.out.println("我是静态代码块");//2
           }
        
            //成员方法f1 在成员方法内部直接调用本类的其他成员方法和静态
            public void f1(){
                f2();//成员方法
                f3();//静态方法
            }
            //成员方法f2
            public void f2(){
            }
            //静态方法f3 首先执行了静态方法再执行成员方法 ,在调用成员方法的时候 还没有创建出来 所以不能调用
            public static void f3(){
                f4();//静态方法中可以直接调用静态方法
        //        f2(); //但是不能够在静态方法中调用成员方法
            }
            //静态方法f4
            public static void f4(){
            }
        }
        
        class Father{
            Father(){
                System.out.println("父类构造方法");
            }//6
            {
                System.out.println("父类代码块");//3
            }
            static {
                System.out.println("父类静态代码块"); //1
            }
        }
        
    • 使用静态方法修饰的属性存放在静态区

      • static修饰的属性
  • 重写(覆盖)

    • 父类中那些方法不能被覆盖(重写)

      • 私有方法
      • 构造方法
      • 静态方法
      • 被final修饰的方法,final最终的,不能被修改
    • public class FunctionTestRiding {
          public static void main(String[] args) {
      //        在Boo类中调用f私有方法 看能否被调用
              Aoo b = new Boo();
      //        b.f(); //无法被调用
              b.f1();
              b.f3();
          }
      }
      class Aoo{
          public void f3(){
              System.out.println("Aoo f3 可以被重写");
          }
      //    私有方法
          private void f(){
              System.out.println("Aoo 私有方法");
          }
          public static void f1(){
              System.out.println("Aoo f1静态方法");
          }
      //    被final修饰
          public final void f2(){
              System.out.println("Aoo f2被final修饰的");
          }
      }
      class Boo extends Aoo{
          public void f3(){
              System.out.println("Boo f3 可以被重写");
          }
      //    private void f(){
      //        System.out.println("Boo 私有方法");
      //    }
      //    感觉被重写了 其实静态方法放在了静态代码区
          //子类自定义的静态方法 并不是重写
          public static void f1(){
              System.out.println("Boo f1静态方法");
          }
      }
      
  • 向上造型

    • 本质上是代码的复用,减少代码量

    • 父类的引用指向子类的对象

    • public class TestFlyingObject {
          public static void main(String[] args) {
            //主要是看new BigPlane去调用方法
              TestFlyingObject t1 = new BigPlane();
              TestFlyingObject t2 = new AirPlane();
              move(t1);
              move(t2);
          }
          public void move(){
      
          }
          public static void move(TestFlyingObject t){
              t.move();
          }
      }
      class BigPlane extends TestFlyingObject{
          public void move(){
              System.out.println("大敌机在移动...");
          }
      }
      class AirPlane  extends TestFlyingObject{
          public void move(){
              System.out.println("小敌机在移动...");
          }
      }
      
  • gitee代码仓库地址:https://gitee.com/Zhengsenbing/java-se-basic

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值