java之代码块与继承

 代码块

  1.局部代码块

   书写位置:方法中

   作用:限制作用域


  2.构造代码块

   书写位置:类中 方法外

  代码的执行顺序:

  1.系统调用

  2.只要创建对象 就会调用

  3.构建代码块在构造方法之前被调用

   作用:当你有方法 需要每一个对象都调用的时候

  可以将这个方法在构造代码块中调用(不调用)


  3.静态代码块

  使用关键词 static 修饰的代码块

  位置:类中 方法外

   调用顺序:

  1.随着类的加载而加载

  2.只加载一次

   3.在构造代码块之前执行

  应用场景:加载驱动(加载数据库的驱动--一个类)


public class Demo01 {
	public static void main(String[] args) {
		//fun1();
		//测试 构造代码块
		Person p1=new Person();
		p1.name="张三";
		p1.sayHi();
		Person p2=new Person("李四",20);
		p2.sayHi();
	}

	private static void fun1() {
		{
		    //局部代码块 限制变量的作用域
		    int num=10;
		    System.out.println(num);
		}
	}
}
//暴力调试法
//小黄鸭调试法(逻辑调试)
class Person{
	String name;
	int age;
	// 无参 和 有参的构造方法
	public Person() {
		System.out.println("我是无参的");
	}
	public Person(String name,int age) {
		this.name=name;
		this.age=age;
		System.out.println("我是有参的");
	}
	
	public void sayHi() {
		System.out.println(name+""+age);
	}
	
	//构造代码块
	public void eat() {
		System.out.println("人--吃饭");
	}
	{
		System.out.println("我是 构造代码块");
	}
	
	//静态代码块
	static {
		System.out.println("我是 静态代码块");
	}
}

    继承

       1.可以进行传递

      2.继承的是属性和行为(不是全部)

      3.继承 建立 类和类之间的关系(让类和类的关系更加紧密)


    继承好处:

      1.减少代码量(代码复用性)

      2.提高工作效率

      3.增强了类与类之间的关系

  

      继承弊端:

      提高内聚:希望一个类中方法与方法之间联系加强

  

      降低耦合:希望类与类之间减少联系

      继承违反低耦合

 

      继承:一定要符合逻辑

      关键字 extends 父类名字


class Animal{
	String name;
	String color;
	
	//介绍自己的方法
	public void sayHi() {
		System.out.println(name+"..."+color);
	}
}

class Cat extends Animal{
	public void speak() {
		System.out.println("喵喵喵");
	}
}

class Dog extends Animal{
	public void speak() {
		System.out.println("汪汪汪");
	}
}

  java中只允许单继承(类与类)(通过接口实现多继承)

  java还允许多层继承(继承链) A-->B-->C

  

  当你想只使用共有方法和属性使用哪个类的对象?

  一般选择使用继承链最顶端的类

  当你想使用特有方法和属性使用哪个类的对象?

  一般选择使用继承链最末端的类

  

  如果一个类没有写继承

  那么这个类 默认继承 Object类

public class Demo04 {
	public static void main(String[] args) {
		DemoA a=new DemoA();
		//当我直接打印对象的时候
		//相当于调用 Object类中 toString方法
		System.out.println(a.toString());
	}
}

class DemoA{
	String name;
	public void sayHi() {
		System.out.println(name);
	}
}

class DemoB extends DemoA{
	
}
class DemoC extends DemoB{
	String sex;
}

    继承中的构造方法

      注意:构造方法是不能继承的

  

      当创建子类对象的时候 为了保证继承的完整性

      (不管你在创建子类对象的时候使用的是无参还是有参构造)

      系统会默认帮你调用父类中的无参的构造方法


    super和this

      super在子类中代表是父类的对象

      this 在子类可以调用子类的属性和方法

      (当子类中没有这个属性或者方法的时候 就去父类中寻找)

      找到就用 没找到就报错

  方法重写

      方法重载(Overload)(在一个类中进行)

      方法重写(Override)(前提:至少两个类 并且还有继承关系)

      方法重写 作用:相当于对父类的该方法进行升级

      重写:跟父类的方法完全一致


      书写一个类 都写什么方法?

      有参 无参构造方法 set/get方法

      重写toString方法输出属性

class IOS7{
	public void siri(){
		System.out.println("说英文");
	}
}

class IOS8 extends IOS7{
	//注释:标识这个方法是重写父类
	@Override
	public void siri() {
		super.siri();
		System.out.println("说中文");
	}
	//这个方法 一般用来 数组本类中的属性
	@Override
	public String toString() {
		//调用的父类的方法
		//打印出来 全类名@16进制的hashcode码
		return "name"+name;
	}	
}

    关键字 final

      1.修饰方法  方法不能被重写

      2.修饰类  类不能被继承

      3.修饰变量  变量不能被修改

        final 修饰 引用数据类型

        不能进行重新指向(地址不能修改了)

        对象中的属性不会影响修改



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值