②基础篇-类的五大特性&代码块&可变参数

封装

  • 将程序封装到类中,通过权限修饰符[ private / default / protected / public ]进行访问权限限制

继承

关系

【类与类】
	隐藏:子类通过[super]关键字访问父类构造方法
【抽象类与抽象类】
【抽象类与类】
【抽象类与接口】
【接口与接口】
【接口与类】

优点:公共代码作用域提升并合并,统一管理,提高复用性
缺点:类是单继承的,继承侵略性强,提高耦合度

同名成员如何区分访问

[this]代表当前类
[super]代表当前父类

注意:this()和super()不能同时出现在构造方法中,保证初始化所以必须方到第一行,二者不可共存;

就近原则访问特点

【变量】: [ 局部变量->this.成员变量->super.对象类父类 ]
【方法】: [ 成员方法->父类成员方法 ]
【静态】:父类与子类继承,类加载阶段静态会完全开辟两片空间,不建议子类实例获取父类静态上下文

抽象

  1. 多个类存在 “方法体相同的方法” 与 “不同方法体但方法声明相同的方法”,共性代码抽取到父类中,“方法体相同的方法” 子类通过继承获取,“不同方法体但方法声明相同的方法”无法实现使用abstract修饰,其实现应交给子类。
  2. 抽象类不一定有抽象方法,但是有抽象方法一定是抽象类
  3. 子类可以成为抽象类的实现子类,也可以成为抽象类的抽象子类

模板模式

public abstract class ContentTemplate {
    public void before(){
        System.out.println("文章开头");
    }

    public abstract void content();

    public void after(){
        System.out.println("文章结尾");
    }

    public void totalContent(){
        before();
        content();
        after();
    }
}

接口

成员变量:public static final
构造方法:已禁用
成员方法:public abstract

jdk8为了解决接口方法升级的问题加入了[default]与[static]修饰则可以有方法体

访问父类方式变动

public class ImplClass interface InterfaceA,InterfaceB{
	public void classMetho(){
		InterfaceA.super.method();
    	InterfaceB.super.method();
	}
} 
	

注意:多实现冲突问题,实现的子类必须对多接口冲突的方法进行重写@Override

多态

【类与类】
【类与抽象类】
【接口与接口】

匿名对象

public class Test {
    public static void main(String[] args) {
        polymorphism(new Cat());
        polymorphism(new Dog());
        System.out.println();
    }

    public static void polymorphism(Animal animal){
        animal.method();
    }
}

运行时机

类存在继承关系,会出现两种重写模式,实现接口重写,继承父类重写,由于重写覆盖的缘故。

成员变量编译看左边,运行看左边。
成员方法编译看左边,运行看右边。

注意:强制类型转换 使用[ instanceof ] 关键词进行类运行时类型效验


代码块

>静态代码块

public class CodeBlock{
	static{
		System.out.println("在类加载阶段将会被初始化");
	}
}

>构造代码块

public class CodeBlock{
	{
		System.out.println("触发构造函数时,构造代码块优先执行被初始化");
	}
}

注意:构造代码块和构造函数容易混淆,两个不同

>局部代码块

public class CodeBlock{
	public void method(){
		{
			System.out.println("方法内短暂的存在,不会太长时间占用内存");
		}
	}	
}

代码块运行顺序

类加载阶段
父类静态块
子类静态块
类运行阶段
父类构造代码块
父类构造器
子类构造代码块
子类构造器

可变参数

  • 最大特点:调用可变参数的方法时,传递的参数数量没有上限和下限。最骚的是你可以传参一个数组
  • 底层:数组
  • 注意:必须放形参最后
  • 使用:需要用方法参数名[索引],如: args[0]
public static void method(Object...args){
	// 获取可变参数数组长度
	int lenght =args.lenght
	// 根据长度通过索引获取元素
	args[0];
	args[1];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值