Java基础 类的继承/重写+static+饿汉懒汉设计模式

static 静态成员

用来修饰静态成员对象

使用 static 修饰的成员对象会和类一起被加载 所以在 static 修饰的成员对象中无法使用实例对象(实例对象尚未加载)如下

public class staticCs {
    String name = "张三";
    static public void  getName(){
        System.out.println(name); //提示无法从 static 上下文引用非 static 字段 'name'
    }
}

而在实例对象中则可以调用static所修饰的成员对象如下

    static String name = "张三";
    public void  getName(){
        System.out.println(name);//输出张三
    }

静态/构造代码块 

静态代码块

    //主要用来初始化实例对象随着类的加载而加载
    //static String name;先执行变量定义 再执行代码块
    static {
        name = "张三";
    }
    static String name;  //顺序不会影响执行效果

构造代码块

/*每一次初始化实例对象new都会触发 用于初始化实例对象 了解即可,因为变量对象的值很少有固定的,
通常都在初始化实例对象new时传实参赋值*/
  public class staticCs {
     String name;
     {
        name = "张三";
    }
    //staticCs newStaticCs = new staticCs("张三") 
    public staticCs(String name){
         this.name = name;
    }
  }

饿汉/懒汉模式(均为单例模式)

//单例模式  保证一个类仅有一个实例,并提供一个访问它的全局访问点

//饿汉
public class staticCs {
    //通过类名 staticCs.newStaticCs  调用使用的是同一个实例
    static staticCs newStaticCs = new staticCs(); 
     
     private staticCs(){
        
    }
}
//饥汉模式
public class staticCs {
    static staticCs newStaticCs;
    private staticCs(){

    }
    //通过方法来返回 实例
    static staticCs getNewStaticCs(){
        if(newStaticCs == null){
            newStaticCs = new staticCs();
        }
        return newStaticCs;
    }
}

类的继承/重写

继承的特点:

1、只支持单继承,即一个子类只允许有一个父类。

2、子类可以拥有父类的属性和方法。

3、子类可以重写覆盖父类的方法。

4、子类可以重写覆盖父类的方法。

5、可继承父类私有化变量只是无法直接访问

重写的注意事项

1、重写时方法的名称、形参列表必须与被重写方法的名称和参数列表一致。

2、私有方法不能被重写。

3、子类重写父类方法时,访问权限必须大于或者等于父类(缺省<protected<public)

4、子类不能重写父类静态方法。重写会报错

//父类

public class OldPhone {
    String name = "张三";
    public void CallUp(){
        System.out.println("打电话");
    }
    public void sendMessage(){
        System.out.println("发信息");
    }
}

//子类
//public class 类名(当前类) extends 类名(要从哪个类那继承对象属性)
// NewPhone  继承了 OldPhone 的对象属性
public class NewPhone extends OldPhone {
    
    //当出现同名变量时 会采用就近原则 不管类型是否相同
    int name = 123;
    // 假设传来的name 参数为 李四
    public void getName(String name){
        //this指向当前原型对象  super指向父类的原型对象 name则是当前方法中的变量名
        //输出张三打视频给123,李四接听了
        System.out.println(super.name + "打视频给" + this.name+","+name+"接听了");
    }
    
   @Override  //重写注释 可检测是不是重写父/祖的方法(不是会报错) 提高代码可读性
    public void CallUp(){
        super.CallUp();//通过super调用父类对象中的方法≈在原有方法基础上进行增强
        System.out.println("打视频");//调用 子类中的CallUp 将输出打电话 \n 打视频
    }

   @Override
   public void sendMessage(){
       super.sendMessage();
       System.out.println("语音");
   }
}

private私有变量的继承

// 在继承父类时 也会继承私有化变量只是无法直接访问 可通过继承父类的方法进行 读/改  
//父类
public class People {
    //私有变量name
    private String name;
    
    //获取name值
    public String getName() {
        return name;
    }
    //设置name值
    public void setName(String name) {
        this.name = name;
    }
    // 无参构造器
    public People(){
        
    }
    //有参构造器
    public People(String name){
        this.name = name
    }

    
}
//子类

public class Student extends People {

    public void getName2() {
        
        System.out.println(this.getName());
    }
    //
    public Student (){
        //  会默认生成super()来调用父类的无参构造器 
    }
    public Student (String name){
        super(name)  //调用父类的有参构造器
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值