java知识day09(代码块;继承;关键词super和this)

代码块

在Java中使用,{}包起来的内容,称为代码块
代码块分为:
局部代码块

在类中的局部位置(方法中定义)
作用:限定当前该局部变量的生命周期,仅仅是在当前代码块作用域中有效

构造代码块

在类中的成员位置使用{}定义,每次执行构造方法之前,先执行构造代码块如果有构造代码块
作用:可以将多个构造方法中的相同的代码可以放到构造代码块中,给对象进行初始化!

静态代码块

在类中的成员位置,static{} ,特点每次只执行一次,优先于对象存在
作用:给类进行初始化的
注意实行:
静态代码块只加载一次!
优先级:
静态代码块> 构造代码块>构造方法

class Code{		//code.class只加载一次

	//静态代码块
	static{
		int x = 1000 ;
		System.out.println(x) ;  //1000
	}
	
	//构造代码块
	{
		int x = 100 ; 
		System.out.println(x) ;//100
	}
	//无参构造方法
	public Code(){
		System.out.println("code...") ;
	}
	
	//有参构造方法
	public Code(String name){
		System.out.println(name); 
	}
	
	//构造代码块
	{
		int y = 200 ;
		System.out.println(y) ; //200
	}
	
	//静态代码块
	static{
		int y = 2000 ;
		System.out.println(y) ; 
	}
	
}

//测试类
class CodeTest{
	
	public static void main(String[] args){
		
		//局部代码块
		{
			int x  = 10 ;
			System.out.println(x) ;//10
		}
		{
			int y  = 20 ;
			System.out.println(y) ;//20
		}
		
		//创建Code类对象
		Code code = new Code();	
		System.out.println("---------------------") ;
		Code code2 = new Code("高圆圆");
	}
}

继承

继承的概念:

将多个类中的共同代码单独提取出来,形成一个独立的类,
多个类和当前独立的类产生一种关系: 继承关系 extends

继承的好处:

1)提高了代码的复用性
2)提高了代码维护性
3)类和类产生这种关系,是多态的前提条件!

Java中的开发原则: Java的所有原则以及Java 23种设计模式,都需要遵循低耦合,高内聚

低耦合,高内聚 (降低耦合性,提高内聚性)
耦合:指的是类和类产生的关系(关系越少越好),一旦一个类中有问题了 ,其他类可能都会受牵连!
内聚:完成一件事情的能力(一个类中如果能完成,尽量一个类完成)

关键字: extends
Java中继承的特点:

1)在Java中,只支持单继承,不支持多继承,在别的语言可能有多继承存在
多继承的语言:class 子类名 extends 父类名1,父类名2{}
2)在Java中,虽然不支持多继承,但是可以多层继承! (分层初始化:先让父类初始化再是子类初始化)
在Java中,所有的Java类(自己定义的,Jdk提供的)都继承自 Object类 (上帝)

继承中的注意事项:

1)子类继承父类,只能继承父类非私有的成员(成员变量,成员方法),但是可以通过公共方法间接的访问!
2)子类不能继承父类的构造方法,但是可以通过关键字
间接访问父类的构造方法(等会讲super)
3)不要为了部分使用功能去使用"继承"

继承中:
成员的组成

成员变量
构造方法
成员方法

成员变量

1)子类继承父类,子类中的成员变量名称和父类中的成员变量不一致的情况:比较简单,分别输出!
2)子类继承父类,子类中的成员变量名称和父类中的成员名称一致的情况:(重点)
a)先在子类的局部位置中找,如果存在,就使用
b)如果在类的局部位置没有,那么在子类的成员位置找,如果存在,就使用
c)如果子类的成员位置没有,那么在父类的成员位置找,如果存在,就使用
d)如果父类的成员位置都没有,那么就报错!

this和super的使用

访问成员变量
this.成员变量:访问的当前类的成员变量
super.成员变量:访问的父类的成员变量
访问构造方法:
this()/this(…):访问本类中构造方法
super()/super(…):访问父类中的构造方法
访问成员方法
this.成员方法名():访问本类中的成员方法
super.成员方法名():访问父类中的成员方法

继承中构造方法初始化的特点(分层初始化!)

继承中,子类不能继承父类的构造方法,但是可以通过super访问父类的构造方法
子类的构造方法中(无参/有参),都会默认访问父类的无参构造方法,
由于子类继承父类,子类可能会用到父类中数据,
所以先让父类进行初始化,再让子类初始化!(分层初始化!)
关于super():访问无参构造方法,必须写在子类构造方法中第一句话

继承中使用构造方法的注意事项:

需求:子类继承父类的时候,子类的构造方法都会默认访问父类的无参,如果父类中不存在无参构造
会出现什么现象?
编译报错
如何解决?
1)手动显示的给出父类的无参构造方法
2)如果父类的无参构造方法不给出,只能通过super(…)间接的访问父类的有参构造
3)可以在子类有参构造方法中通过this(),访问本类的无参,然后在通过本类的无参间接的
通过super(…)访问父类的有参

记住一句话:
子类有参构造或者无参构造的一个,必须让父类进行初始化!

继承使用例子:猫.狗继承动物
class Animals{
	private String name;
	private int age;
	private String maose;
	public Animals(){
	}
	public Animals(String name,int age,String maose){
		this.name=name;
		this.age=age;
		this.maose=maose;
	}
	public void setname(String name){
		this.name=name;
	}
	public void setage(int age){
		this.age=age;
	}
	public void setmaose(String maose){
		this.maose=maose;
	}
	public String getname(){
		return name;
	}
	public int getage(){
		return age;
	}
	public String getmaose(){
		return maose;
	}
	public void eat(){
		System.out.println("正在吃饭...");
	}
	public void sleep(){
		System.out.println("正在睡觉...");
	}
}
class Dog extends Animals{
	public Dog(){
	}
	public void xingge(){
		System.out.println("温顺") ;
	}
}
class Cat extends Animals{
	public Cat(){
	}
	public void xingge(){
		System.out.println("暴躁") ;
	}
}
class DogCat{
	public static void main(String[] args){
		Dog d=new Dog();
		d.setname("金毛");
		d.setage(2);
		d.setmaose("金色");
		System.out.println(d.getname()+"--"+d.getage()+"岁--"+d.getmaose());
		d.sleep();
		d.eat();
		Cat c=new Cat();
		System.out.println("--------------------------") ;
		c.setname("大橘为重");
		c.setage(3);
		c.setmaose("橘黄色");
		System.out.println(d.getname()+"--"+d.getage()+"岁--"+d.getmaose());
		c.eat();
		c.sleep();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值