文章目录
一、继承
面向对象的三大特征:封装性,继承性,多态性。 结全是多态的前提,如果没有继承,就没有多态。
1.1继承主要解决的问题就是:共性抽取。
1.2继承关系当中的特点:
1).子类可以拥有父类的内容。
2).指令还可以拥有自己专有的内容。父类也可以叫基类、超类。子类可以叫派生类。
1.3继承的实现
在Java中,使用关键字extends来继承类,方法如下
public class ChildClass extends ParentClass{
//程序代码
}
上面的代码表明ChildClass类继承了parentClass类。继承的本质是子类将父类的非私有成员直接作为自己的成员。
二、重写
如果在子类中定义的一个方法,其名称,返回值类型和参数列表正好与父类中的某个方法的名称、返回值类型和参数列表相匹配,那么可以说子类的方法重写了父类的方法。
三、重载方法及其重写方法的区别
3.1重载方法
在Java中,可以在一个类中用相同的名称定义两个或多个方法,但参数项不同。当两个方法名称相同,而参数向不同时,就认为此方法被重载,而此过程称为“方法重载”。在调用重载方法时,Java使用的参数的类型和数量决定了实际调用重载方法的版本。重载方法可以有不同的返回值类型,但返回值类型本身不足以区别方法的两个版本。因此,重载方法的参数类型和数量必须不同。 调用重载方法时,Java将尝试调用一个参数类型和数量与此方法的参数类型和数量相匹配的方法。如果不完全匹配,Java的自动类型转换功能将解决此类行并调用正确的重载方法。 程序员可以在编写方法时根据需要进行方法重载构造方法也可以重载。构造方法重载是方法重载的一个典型特例。
3.1.1方法重载支持多态性。
方法重载支持多态性,因为它是Java实现“一个接口,多种方法模式”的一种模式。
3.2存在与重写的区别
方法的重载和重写是Java多态性的不同表现。
3.2.1重写
重写是父类与子类之间多态性的一种表现。
3.2.1.1重写又称覆盖。
我们在继承中经常会在子类中覆盖父类的方法,在覆盖时应注意以下几点。
(1)重写方法的参数列表必须与被重写的方法完全相同,否则不是重写,而是重载。
(2)重写方法的访问修饰符一定要大于被重写方法的访问修饰符,即要保证。pubic>Proected>default>private。
(3)重写方法的返回值必须和被重写的方法的返回值一致。
(4)重写的方法抛出的异常必须和被重写的方法所抛出的异常一致,或者是该异常类的子类。
(5)被重写的方法不能为否则在其子类中只是新定义了一个方法,而并没有对其进行重写。(6)静态方法不能被重写为非静态方法,否则会编译出错。
3.2.2重载重载是一个类中多态性的一种表现。
重载的方法是可以改变返回值的类型。重载是指可以在类中定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后在调用时,由JVM(虚拟机)根据不同的参数样式来选择合适的方法执行。
3.2.2.1在使用重载时要注意以下几点
(1)只能通过不同的参数样式来实现,例如,不同的参数类型或不同的参数个数
(2)不能通过访问权限、返回类型、抛出的异常进行重载。
(3)方法的异常类型和数目不会对重载造成影响。
代码与程序运行结果
package com.hg.day09.demo01;
public class Teacher extends Employee {
public void methodChildren() {
System.out.println("我是子类--老师的方法");
System.out.println("我要讲课");
}
}
package com.hg.day09.demo01;
public class Employee {
String name;
int age;
public void method() {
System.out.println("我是父类--雇员的方法");
}
}
package com.hg.day09.demo01;
public class Assistant extends Employee{
public void methodChild() {
System.out.println("我是子类--助教的方法");
System.out.println("我要讲课");
}
}
package com.hg.day09.demo01;
public class Demo01Extends {
public static void main(String[] args) {
Teacher teacher=new Teacher();
teacher.method();
teacher.methodChildren();
Assistant assistant=new Assistant();
assistant.method();
assistant.methodChild();
}
}
package com.hg.day09.demo02;
public class Zi extends Fu {
int numZi=20;
int num=200;
public void methodZi() {
System.out.println("我是子类方法:"+num);
}
}
package com.hg.day09.demo02;
public class Fu {
int numFu=10;
int num=100;
public void methodFu() {
System.out.println("我是父类方法:"+num);
}
}
package com.hg.day09.demo02;
public class Demo02extends {
public static void main(String[] args) {
Fu fu=new Fu();
System.out.println("=========");
Zi zi=new Zi();
System.out.println(zi.numFu);
System.out.println(zi.numZi);
System.out.println("=========");
System.out.println(zi.num);
System.out.println("=========");
zi.methodZi();
}
}
package com.hg.day09.demo03;
public class Zi extends Fu {
public void methodZi() {
System.out.println("我是子类方法 methodZi");
}
public void method() {
System.out.println("我是子类方法 method");
}
}
package com.hg.day09.demo03;
public class Fu {
public void methodFu() {
System.out.println("我是父类方法 methodFu");
}
public void method() {
System.out.println("我是父类方法 method");
}
}
package com.hg.day09.demo03;
public class child extends Fu{
}
package com.hg.day09.demo03;
public class Demo03Extend {
public static void main(String[] args) {
Zi zi=new Zi();
zi.methodFu();
zi.methodZi();
zi.method();
Fu fu=new Fu();
}
}
package com.hg.day09.demo04;
public class Phone {
public void call() {
System.out.println("打电话"); }
public void send() {
System.out.println("发信息"); }
public void show() {
System.out.println("老手机显示号码"); }
}
package com.hg.day09.demo04;
public class NewPhone extends Phone{
public void show(){
super.show();
System.out.println("显示头像");
System.out.println("显示归属地");
}
}
package com.hg.day09.demo04;
public class Demo04Phone {
public static void main(String[] args) {
Phone phone=new Phone();
phone.call();
phone.send();
System.out.println("==============");
phone.show();
System.out.println("=====================");
NewPhone newphone=new NewPhone();
newphone.call();
newphone.send();
System.out.println("=================");
newphone.show();
}
}
package com.hg.day09.demo05;
public class Zi extends Fu {
public Zi() {
super(20,"周敏");
System.out.println("子类无参数构造法");
}
}
package com.hg.day09.demo05;
public class Fu{
public Fu() {
System.out.println("父类无参数构造法");
}
public Fu(int num) {
System.out.println("父类一个参数 有参数构造法");
}
public Fu(int num,String name) {
System.out.println("父类两个参数 有参数构造法");
}
}
package com.hg.day09.demo05;
public class Demo05Extends {
public static void main(String[] args) {
Zi zi=new Zi();
}
}
package com.hg.day09.demo06;
public class Zi extends Fu{
int num=20;
public Zi() {
super();
}
public void method() {
System.out.println("子类方法");
}
public void methodZi() {
System.out.println(num);
System.out.println(super.num);
super.method();
}
}
package com.hg.day09.demo06;
public class Fu {
int num=100;
public void method() {
System.out.println("父类方法");
}
}
package com.hg.day09.demo06;
public class Demo06Extends {
public static void main(String[] args){
Zi zi=new Zi();
zi.methodZi();
}
}