#1.继承
public class Animal { String name; int id; public void eat() { System.out.println(name + "正在吃"); } public void sleep() { System.out.println(name + "正在睡"); } public void activity() { System.out.println(name + "can sing songs"); } public class Cat extends Animal{ public void introduction() { System.out.println("大家好!我是" + id + "号" + name + "."); } public class Test { public static void main(String[] args) { Cat c = new Cat(); c.name = "小明"; c.id = 1; c.eat(); c.sleep(); c.activity(); c.introduction(); }#2.在子类中,访问父类中的成员方法格式:super.父类中的成员方法();
public class Phone{ public void sendMessage() { System.out.println("发短信"); } public void call() { System.out.println("打电话"); } public void showNum() { System.out.println("来电显示号码"); } public class NewPhone extends Phone{ public void showNum() { super.showNum(); System.out.println("显示来电姓名"); System.out.println("显示头像"); System.out.println("显示性别"); } public class Test { public static void main(String[] args) { new NewPhone().showNum(); }#3.重写 当子类中出现和父类一模一样的方法时,会出现覆盖。也称为override重写、复写或者覆盖。 ##重写的应用 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。 注意事项: 1、子类方法覆盖父类方法,必须要保证权限大于等于父类权限。 2、写法上稍微注意:必须一模一样:方法的返回值类型 方法名 参数列表都要一样。 3、不要和重载混淆了,覆盖是在继承里面的。 #总结:当一个类是另一个类中的一种时,可以通过继承,来继承属性与功能。如果父类具备的功能内容需要子类特殊定义时,进行方法重写。
#多态存在的三个必要条件 继承: 多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。 重写: 在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。 父类引用指向子类对象,比如:Parent p = new Child();
#多态的定义格式:就是父类的引用变量指向子类对象 父类类型 变量名 = new 子类类型(); 变量名.方法名();
#普通类多态定义的格式 父类 变量名 = new 子类();
如: class Fu {} class Zi extends Fu {} //类的多态使用 Fu f = new Zi();#抽象类多态定义的格式 抽象类 变量名 = new 抽象类子类();
如: abstract class Fu { public abstract void method(); } class Zi extends Fu { public void method(){ System.out.println(“重写父类抽象方法”); } } //类的多态使用 Fu fu= new Zi();#接口多态定义的格式 接口 变量名 = new 接口实现类();
如: interface Fu { public abstract void method(); } class Zi implements Fu { public void method(){ System.out.println(“重写接口抽象方法”); } } //接口的多态使用 Fu fu = new Zi();#注意事项:同一个父类的方法会被不同的子类重写。在调用方法时,调用的为各个子类重写后的方法。
如 Person p1 = new Student(); Person p2 = new Teacher(); p1.work(); //p1会调用Student类中重写的work方法 p2.work(); //p2会调用Teacher类中重写的work方法 class Fu { int num = 4; } class Zi extends Fu { int num = 5; } class Demo { public static void main(String[] args) { Fu f = new Zi(); System.out.println(f.num); Zi z = new Zi(); System.out.println(z.num); } } class Fu { int num = 4; void show() { System.out.println("Fu show num"); } } class Zi extends Fu { int num = 5; void show() { System.out.println("Zi show num"); } } class Demo { public static void main(String[] args) { Fu f = new Zi(); f.show(); } }