java继承和方法重写及其练习题

继承中构造方法的关系

当我们实例化son s =new Son();其中son()先找到子类无参构造,但是构造方法第一行是super(),所以运行父类的无参构造。

总结:子类初始化前,一定要完成父类的初始化。

注意:每个构造方法的第一句默认为super()(Object类没有父类)

1.父类没有无参构造,而子类有无参构造?

        super会报错,因为找不到父类的无参构造

        让super找父类的有参构造,并把参数值传递给super()中,让值能传到父类的有参构造。

继承练习

封装:把共有的属性和行为写出来 Person: 姓名 年龄 get/set 构造方法 吃饭

老师区继承person 老师写出自己的讲课

学生继承person 学生写出自己的学习

package com.demo1.cn;

public class Animal {
	private String name;
	private int age;
	public Animal() {
		
	}
	public Animal(String name,int age) {
		this.name=name;
		this.age=age;
	}
	public void show() {
		System.out.println(name+"吃饭");
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}
package com.demo1.cn;

public class Student extends Animal {
	public Student() {
		System.out.println("无参构造");
	}
	public Student(String name,int age) {
		super(name,age);
		System.out.println("有参构造");
	}
	public void show() {
		super.show();;
		System.out.println(getName()+","+getAge()+"岁正在学习");
	}
}
package com.demo1.cn;

public class Teacher extends Animal{
	public Teacher() {
		System.out.println("无参构造");
	}
	public void show() {
		super.show();
		System.out.println(getName()+","+getAge()+"岁正在讲课");
	}
}
package com.demo1.cn;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student s=new Student("学生",16);
		s.show();
		System.out.println("------------");
		Teacher c=new Teacher();
		c.setName("老师");
		c.setAge(25);
		c.show();
	}

}

结果:

java继承和方法重写及其练习题_第1张图片

 

 面试题:

1.看程序写结果

class Fu{

public int num=10;

public Fu(){

system.out.println("fu")

}

}

class Zi extends Fu{

public int num=20;

public Zi(){

super();

system.out.println("zi");

}

public void show(){

int num=30;

system.out.println(num);

system.out.println(this.num);

system.out.println(super.num);

}

}

class Test{

public static void main(String[] args){

Zi z=new Zi();

z.show();

}

}

结果

java继承和方法重写及其练习题_第2张图片

 2.class Fu{

static{

System.out.println("静态代码块Fu");

}

{

System.out.println("构造代码块Fu");

}

public Fu(){

System.out.println("构造方法Fu");

}

}

class Zi extends Fu(){

static{

System.out.println("静态代码块zi");

}

{

System.out.println("构造代码块zi");

}

public Zi(){

System.out.println("构造方法zi");

}

}

Zi z=new Zi();请指向结果

java继承和方法重写及其练习题_第3张图片

解析

java继承和方法重写及其练习题_第4张图片

 

 3.方法重写(override)与方法重载(voerload)的区别?

返回值:方法重载返回值类型可以改变,方法重写返回值类型可以是父类,也可以是子类

方法重载:本类在出现了方法名一样,参数不同(位置,个数,类型)与返回值无关

方法重写:子类出现和父类方法声明一样的方法,与返回值有关,范胡子必须一致。

细化 方法重写 方法重载
方法名 相同 相同
参数列表 相同 不同(位置个数,类型)
返回值 相同 无关

方法重写既可以继承原来的功能,也可以添加新的功能,实现升级过程。

方法重写概述及应用

1.什么是重写

子类出现了和父类一模一样的方法(返回值类型可以是子类也可以是父类)

当子类需要父类的功能,而功能主体子类有自己特有的内容,可以重写父类的方法,既沿袭了弗雷德功能,有定义了子类特有的内容。

2.注意事项

(1)父类中私有的方法不能被重写。

        因为父类私有方法子类无法继承。

(2)子类重写父类方法时,访问权限不能低于父类。

        最好一致

(3)父类是静态方法时,子类重写也必须是静态方法

        算不上重写,但是现象是重写效果。

(4)子类重写父类方法时,最好写的一模一样

final关键字针对变量的特点(常量)

特点(用final定义,代表着不能被改变)

修饰类:类不能被继承

修饰变量:变量就成了常量,只能呗赋值一次。

修饰方法:方法将不能被重写

final关键字,修饰局部变量

基本类型:值不能被改变

引用类型:是地址不能被改变,对象中的属性可以被改变。

 

你可能感兴趣的:(java,开发语言)