Java day09

继承

java三大特性(封装,继承,多态)之一,其中继承是多态的前提,继承是父类对之类共性的抽取,在继承中子类能够拿到父类的所有可见的东西

public class Father{}

public class Son extends Father{} //son 继承了 father

在继承中父类可被称为超类或基类,子类可被称为派生类
注意继承的层数不要太多,一般三层就是算多的了
继承如果滥用的话,会使你在编写某个类的时候,这个类很大一部分并不在本类,有一些问题你很难注意到

继承的语法

  1. 父类
    public class 父类的类名{属性与 方法 }
  2. 子类
    public class 子类名 extends 父类名{}

子类访问父类的属性

public class Father{
	public String name;
	public void run(){}
}

public class Son extends Father{} //son 继承了 father
public class Test{
	public static void main(String[] args){
		Son son = new Son();
		son.name = "Tom";
	}
}

//创建子类时,会先创建一个父类对象,然后创建子类对象,son指向了两个对象
//通过子类对象调用方法或成员变量时,会先看子类有没有
//子类有就用子类的,子类没有就用父类的
//例如给name赋值,是改变的父类对象中的name属性,子类对象没有name属性
//这和变量的作用域相似

//继承中访问子类对象的成员变量,方法
//和访问父类对象中公有的成员变量,方法是一样的
//都是 对象名.变量或方法名
//父类对象中的私有属性或方法,子类对象无法调用
//但是可以通过调用父类对象的公有方法,调用父类对象的私有部分

重写和重载

  1. 重载
    在同一个类里,可以方法名相同,参数列表或者是参数的个数不同的方法,这就是方法的重载,这可以产生通过一个方法处理多种数据类型的效果
    注意返回值不同不是重载
  2. 重写
    在继承关系中,子类与父类方法的方法名相同,参数也相同,称为子类重写了父类的方法,这样子类借用父类方法,扩展,增强和特化功能
    3.方法重写注解 @Override
    表示重写,用于编译判断是否是重写的方法

方法重写需要主要事项:

  1. 重写方法的返回值类型不能严于父类
  2. 重写的方法的访问修饰符不能严于父类
  3. Object 表示所有类的直接爸爸或者是间接爸爸

子类实例化

在继承中,子类实例化的时候,一定会先走父类的构造器,构造父类对象

  1. 如果父类没有提供构造方法,默认系统会生成一个
  2. super(参数列表),可以调用父类的构造方法 ,如果父类只有有参构造,那么子类也必须先调用父类的有参构造
  3. 如果父类有无参构造,子类不调用父类的有参构造也不会报错
  4. 子类可以调用父类的任意的构造
  5. super()也必须放在构造函数的第一行
  6. this()与super()不可能同时存在
  7. 构造方法调用避免死循环

this与super之间的区别

public class Father{
	public Father(String name){} 
}

public class Son extends Father{
	public Son(){
		super(name); 
		//调用父类构造器生成父类对象
		//此语句必须是第一行语句,注释或空行忽略
		//因为this()是调用本类构造器,也必须在第一行
		//因此this() 和 super() 不能共存
	}
}
  1. this()

    1. 既可以调用本类的无参构造,也可以调用其有参构造,
    2. 不可以同时调用本类的有参构造和无参构造
    3. this()只能放在构造里的第一行
  2. this()语法

    1. this()可以访问属性 this.属性名
    2. this()可以访问方法 this.方法名
    3. this()访问构造 this(参数列表)
  3. this()和super()

    1. this,表示当前对象的引用.super,表示父类对象的引用
    2. this,可以调用子类的属性与方法,还能调用父类的属性与方法(也就是子类不存在这个属性与方法的时候就调用父类),super只能调用父类的
    3. this() 表示表示调用的本类的构造,super()表示调用父类的构造

子类调用父类

  1. 父类私有的属性与方法,子类都获取不到
  2. 父类构造方法不能够被继承,但是可以被子类构造方法调用

继承的好处和坏处

好处

  1. 可维护性比较高
  2. 可扩展性比较高
  3. 是多态的前提

坏处
使类与类之间的联系度更高,如果修改父类,子类也会发生相应的变化

java继承的特点

  1. java只支持单继承,也就是只能存在一个直接父类
  2. java支持多层继承
  3. 一个父类可以存在多个子类

代码块

public class Student{
	static{
		//静态代码块
	}

	{
		//构造代码块
	}
	public void study(){
			{
				//局部代码块
			}
	}
}
  1. 局部代码块

    1. 位置: 是在方法里
    2. 作用:在局部代码的变量的生命周期比较短,节省内存资源
    3. 注意点:局部代码块申明的变量,出了这个代码块之后就不能获取了 (比较少用)
  2. 构造代码块

    1. 位置: 在类里,在方法外
    2. 作用: 用于给成员变量来进行赋值,或者是每个构造方法都要执行的方法
    3. 描述
      1. 构造代码块是由jvm执行的(比较少用)
      2. 只要实例化对象就会走构造代码块
      3. 构造代码块是在构造之前执行
  3. 静态代码块

    1. 位置:在类里,在方法外
    2. 作用
      1. 给静态变量赋值
      2. 加载配置文件 加载驱动
    3. 语法: static{}
    4. 描述:
      1. 静态代码块是随着类的加载而加载
      2. 静态代码只走一次 3.静态代码块优先加载

4.同步代码块: synchronized (){} 作用:保证多线程安全

final 关键字

  1. 可以修饰局部变量
    只能被赋值一次
  2. 可以修饰成员变量
    不能被修改
  3. 可以修饰方法
    不能被重写
  4. 可以修饰类
    不能被继承
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值