A:案例演示
看程序写结果1
class Fu{
public int num = 10;
public Fu(){
System.out.println("fu");}
}
class Zi extends Fu{
public int num = 20;
public Zi(){
System.out.println("zi");}
public void show(){
int num = 30;
System.out.println(num);//30
System.out.println(this.num);//20
System.out.println(super.num);//10 }
}
class Test {
public static void main(String[] args) {
Zi z = new Zi();
z.show(); }
}
B:案例演示
看程序写结果2
class Fu {
static {System.out.println("静态代码块Fu"); } //1
{System.out.println("构造代码块Fu"); } //3
public Fu() {System.out.println("构造方法Fu"); } //4
}
class Zi extends Fu {
static {System.out.println("静态代码块Zi"); } //2
{System.out.println("构造代码块Zi"); } //5
public Zi() {
super();
System.out.println("构造方法Zi"); } //6
}
class Test{
public static void main(String[] args){
Zi z = new Zi(); //请执行结果。Fu.class--先进内存加载 }
}
public class Person {
String name;
int age;
public void eat() {System.out.println("吃饭"); }
public void sleep() {System.out.println("睡觉"); }
}
public class Teacher extends Person{
@Override
public void eat() {System.out.println("老师爱吃燃面");}
@Override
public void sleep() {System.out.println("老师喜欢按点睡觉");}
public void teach(){System.out.println("老师教书");}
}
public class Student extends Person{
@Override
public void eat() {System.out.println("学生爱吃麻辣烫");}
@Override
public void sleep() {System.out.println("学生喜欢睡到自然醒");}
public void playGame(){System.out.println("学生玩游戏");}
}
public class MyTest {
public static void main(String[] args) {
Student student = new Student();
student.name = "张三";
student.age = 24;
System.out.println(student.name);
System.out.println(student.age);
student.eat();
student.sleep();
student.playGame();
System.out.println("===========================");
Teacher teacher = new Teacher();
teacher.name = "沈员外";
teacher.age = 18;
System.out.println(teacher.name);
System.out.println(teacher.age);
teacher.eat();
teacher.sleep();
teacher.teach();
}
}
三、final关键字概述(掌握)
A:为什么会有final
由于继承中有一个方法重写的现象,而有时候我们不想让子类去重写父类的方法.这对这种情况java就给我们提供了一个关键字: final
B:final概述
final关键字是最终的意思,可以修饰类,变量,成员方法。
public class MyTest {
//公共的静态常量
public static final boolean B=true;
public static void main(String[] args) {
//final 最终的,可以修饰变量,可以修饰成员方法,可以修饰类
//final 修饰变量,此变量为一个常量
//常量名一般大写
final int num=100;
// num=200; //报错
System.out.println(num);
final double A=3.14; //自定义常量
System.out.println(MyTest.B);
//final 修饰类,此类不能被继承。
//final 修饰方法。此方法不能被重写,子类只能继承使用。
Son son = new Son();
son.show();
son.test();
System.out.println("========================");
final Son son1 = new Son();
// son1=new Son();
//final 修饰引用类型,指的是 地址值不能再次改变
}
}
//final 修饰类,此类不能被继承。
final class Fu{ }
class Father{
public void show(){}
public final void test(){
System.out.println("最终的方法。子类继承下来使用,子类不能重写");
}
}
class Son extends Father{
@Override
public void show() {
super.show();
}
}
四、多态的概述及其代码体现(掌握)
A:多态概述
某一个事物,在不同时刻表现出来的不同状态。
举例: Cat c=new Cat();
Animal a=new Cat();
猫可以是猫的类型。猫 m = new 猫();
同时猫也是动物的一种,也可以把猫称为动物。动物 d = new 猫();
B:多态前提
a:要有继承关系。
b:要有方法重写。 其实没有也是可以的,但是如果没有这个就没有意义。
c:要有父类引用指向子类对象。
父 f = new 子();
C:案例演示
代码体现多态
public class MyTest {
public static void main(String[] args) {
//多态的弊端:不能直接调用子类特有的功能
Fu fu = new Zi();
fu.show();
//多态的形式不能调用子类特有的功能
//fu.method();
//如果要调用子类特有的方法,我们可以向下转型。
Zi zi= (Zi) fu;
zi.method();
//向上转型:把子类型,转换成父类型。多态就是向上转型。
}
}
class Fu{
public void show(){
System.out.println("父类的show方法");}
}
class Zi extends Fu{
@Override
public void show() {
System.out.println("我重写了父类的show方法");}
public void method(){
System.out.println("这是子类特有的一个方法");}
}
案例演示 孔子装爹
public class MyTest {
public static void main(String[] args) {
//09.05_ 案例演示 孔子装爹
/* 孔子爹,他是一名Java讲师,讲课很有名。一天张三慕名前来,把孔子爹请到家里讲Java去了。
家里就剩孔子一个人在家玩游戏,这个李四,也想学Java,也来请孔子爹,孔子爹不在家,孔子不想失去这个学员。
孔子就乔装打扮了一番,装扮成他爹的模样,去给李四讲课了,其实孔子讲的是论语,孔子好不容易讲完了,
他说装爹太累了,所以卸下装扮,做回他自己,愉快的玩了一把游戏。
* */
孔子爹 k=new 孔子();
System.out.println(k.age); //60
k.teach(); //讲Java
//向下转型
孔子 kongzi= (孔子) k;
System.out.println(kongzi.age);//30
//调用自己特有的功能
kongzi.playGame();}
}
class 孔子爹{
int age=60;
public void teach(){
System.out.println("讲授Java");}
}
class 孔子 extends 孔子爹{
int age=30;
@Override
public void teach() {
System.out.println("讲论语");}
public void playGame(){
System.out.println("玩游戏");}
}