Java中的继承及this,super的使用

一、代码块:用{ }括起来的代码

1、局部代码块:方法中出现

     作用:用于限制变量的生命周期,及早释放,提高内存利用率

public class CodeBlock {
	public static void main(String[] args) {
		{
			int n=10;
			System.out.println(n);
		}
	}
}

结果:10

2、构造代码块:类中的成员位置,每次调用构造方法执行前,都会先执行构造代码块

     作用:可以把多个构造方法中的共同代码放到一起,对对象进行初始化

class Code{
	{
		int x = 100;
		System.out.println(x);
	}
	public Code() {
		System.out.println("hello world");
	}
	{
		int y = 1000;
		System.out.println(y);
	}
}
public class CodeBlock {
	public static void main(String[] args) {
		Code c = new Code();
	}
}

结果:100 1000 hello

3、静态代码块:在类中的成员位置,用static修饰

作用:一般是对类进行初始化

class Code{
	{
		int x = 100;
		System.out.println(x);
	}
	public Code() {
		System.out.println("hello world");
	}
	static{
		int y = 1000;
		System.out.println(y);
	}
}
public class CodeBlock {
	public static void main(String[] args) {
		Code c = new Code();
	}
}

结果:1000 100 hello

执行顺序: 静态代码块(只执行一次) -- 构造代码块( 每次都执行) -- 构造方法

4、同步代码块

二、继承:

多个类存在相同的属性和行为时,将这些内容抽取到一个单独的类中,那么多个类无需再定义直接继承这个类就行了

父类中定义一些共有的特性(成员变量,无参构造,带参构造,成员方法)
子类中定义无参构造,带参构造,子类特有的功能

1、格式:class 子类名 extends 父类名{ }

class Person{
	String name;
	int age;
	public Person(){}
	public void eat() {
		System.out.println("我喜欢吃");
	}
	public void sleep() {
		System.out.println("我也爱睡觉");
	}
}
class Student extends Person {}
class Teacher extends Person {}

public class ExtendDemo {
	public static void main(String[] args) {
		Student s = new Student();
		s.eat();
		s.sleep();
		System.out.println("---- 这是分割线 ----");
		Teacher t = new Teacher();
		t.eat();
		t.sleep();
	}
}

2、继承的优点:

(1)提高了代码的复用性

(2)提高了代码的维护性

(3)让类与类之间产生关系,是多态的前提

3、弊端:

     类的耦合性增强了

开发的原则: 低耦合,高内聚
耦合:类与类的关系
内聚:自己完成某件事的能力

4、继承的特点:

    (1)只支持单继承,不支持多继承

    (2)支持多层继承

多层继承:

class GrandFather{
	public void show1() {
		System.out.println("继承爷爷的");
	}
}

class Father extends GrandFather{
	public void show2() {
		System.out.println("继承爸爸的");
	}
}

class Son extends Father {}

public class ExtendDemo2 {
	public static void main(String[] args) {
		Son s = new Son();
		s.show2();
		s.show1();
	}
}

5、注意事项:

(1)子类不能继承父类的私有成员方法或变量,但子类可以通过访问父类非私有方法来访问私有变量
(2)子类不能继承父类的构造方法,但可以通过super关键字去访问父类的构造方法(super(方法名))
  (3)不要为了部分功能而继承

6、成员关系:

(1)继承中构造方法之间的关系:
      子类都会访问父类的无参构造
      默认存在语句super();
      子类的构造方法执行前默认先执行父类的无参构造方法,
      如果父类没有无参构造方法的话就会报错
      报错解决方法:
      在父类中给出无参构造
      在子类的无参构造中通过super(...)来访问父类的带参构造

(2)继承中成员方法之间的关系:
         通过子类调用方法:
         现在子类中找,有就使用,没有的话再去父类中寻找

继承:

class People{
	private String name;
	private int age;
	public People() {}
	public People(String name,int age) {
		this.name = name;
		this.age = age;
	}
	public void show() {
		System.out.println(name+"---"+age);
	}
}
class Student2 extends People{
	public Student2(String name,int age) {
		super(name,age);
	}
}

public class ExtendDeno4 {
	public static void main(String[] args) {
		Student2 s = new Student2("小明",3);
		s.show();
	}
}

三、super 和 this 关键字:

1、区别:

     this 代表本类对应的引用
     super代表父类存储空间的标识(可以理解为父类引用)

2、用法:

(1)调用成员变量:

    this.成员变量
    super.成员变量

(2)调用构造方法:

   this(方法名)   (调用本类的构造方法)
   super(方法名)(调用父类的构造方法)

(3)调用成员方法:

    this.成员方法   (调用本类的成员方法)
    super.成员方法 (调用父类的成员方法)

调用成员方法:

class NewFather{
	public int n = 10;
}
class Son1 extends NewFather{
	public int n = 20;
	public void show() {
		int n = 30;
		System.out.println(n);
		System.out.println(this.n);
		System.out.println(super.n);
	}
}
public class ExtendDemo3 {
	public static void main(String[] args) {
		Son1 s = new Son1();
		s.show();
	}
}

四、方法重写和方法重载:

1、方法重写:

    子类中出现和父类方法中方法声明一样的方法

    应用:需要父类的功能,子类又有自己有的内容时,沿袭了父类的功能,又有了子类自己特有的功能

    可以在重写的方法中用super.方法名(参数)来调用父类的方法。

    方法重写的应用:

class Clothes{
	public void show(String name) {
		System.out.println("我有一个"+name);
	}
}
class MoreClothes extends Clothes{
	public void show(String name) {
		super.show(name);
		System.out.println("又买了一个小短裤");
	}
}
public class ExtendDeno4 {
	public static void main(String[] args) {
		MoreClothes m = new MoreClothes();
		m.show("连衣裙");
	}
}

方法重写的注意事项:
(1)方法中的私有方法不能被重写
  (2)子类重写父类方法时,访问权限不能更低
(如:父类方法为public,子类重写是权限也应该是public及其以上,最好一致)

2、方法重载:
     本类中出现的方法名一样,但是参数列表不同的方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值