文章目录
继承
继承的基本概念
(1)类的继承是面向对象程序设计的一个重要特点,通过继承可以实现代码重用,被继承的类称为父类或超类,由继承得到的类称为子类或派生类。(2)面向对象的三大特征:封装性,继承性,多态性。
(3)继承是多态的前提,如果没有继承,就没有多态。
(4)继承主要解决的问题就是共性抽取。
(5)继承涉及将父类的特征和行为传给子类,所以子类的特征和行为与其父类非常相似。
(6)如果有两个类,它们或多或少的具有一组相同的属性和方法,我们可以创建一个具有两个类共同属性的父亲,再编写两个子类继承父类的全部或部分属性,而不是创建两个单独的类。
(7)有多种表示父类和子类的术语,如父类和子类,超类和子类,基类和派生类等。
(8)继承的本质是子类将父类的非私有成员直接作为自己的成员。
重写
如果在子类中定义的一个方法,其名称、返回值类型和参数列表正好与父类中的某个方法的名称、返回值类型和参数列表相匹配,那么可以说,子类的方法重写了父类的方法。在类体系结构中,当子类中的方法与其父类中的方法具有相同的方法名时,则认为子类中的方法重写了父类中的方法,从子类中调用重写方法时,将总是调用出现在子类的方法,而父类中的方法被隐藏。
方法覆盖重写的应用场景
设计原理:对于已经投入使用的类,尽量不要进行修改,推荐定义一个新的类,来重复利用其中共性内容,并且添加改动新内容。# 重载方法及其与重写方法的区别在JAVA中,重写方法是指子类中重新定义了与其父类中有着相同的名称,返回值类型和参数列表的方法体,而在同一个类中也可以存在同名但参数列表不同的方法。
(1)重载方法
在java中,可以在一个类中用相同的名称定义两个或多个方法,但参数项不同,当两个方法名称相同,而参数项不同时就认为此方法被重载,而此过程称为"方法重载"。调用重载方法时,java使用的参数的类型和数量决定了实际调用重载方法的版本,重载方法可以有不同返回值类型,返回值类型本身不足以区分方法的两个版本。因此重载方法的参数类型和数量必须不同。
父类与子类
(1)继承的主要优势在于代码的可重用性,一个类一经定义和调试,便可以用来创建新的子类,这样做除了节省大量的时间和精力之外,还无需重新输入相同的代码,另外,父类的数据和方法可用于它的子类,但如果将父类的数据和方法声明为私有使用(关键字为private),则子类不能访问它们。(2)通过使用关键字super,程序员还可以用子类构造方法中调用父类中的默认构造方法或带参数的构造方法,调用父类构造方法的语句应该为子类构造方法中的第一个语句,因为父类的存在先于子类。子类构造法调用super()时,它调用的是直接父类的构造方法,super()总是指调用类的直接父类。
代码展示
demo01
package com.hg.day09.demo01;
public class Assistant extends Employee {
public void methoChildren() {
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.methoChildren();
}
}
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 Teacher extends Employee{
public void methodChildren() {
System.out.println("我是子类--老师的方法");
System.out.println("我要讲课");
}
}
demo02
package com.hg.day09.demo02;
public class Demo02Extend {
public static void main(String[] args) {
Fu fu=new Fu();
System.out.println(fu.numFu);
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.demo02;
public class Fu {
int numFu=10;
int num=100;
public void methodFu() {
System.out.println("我是父类方法:"+num);
}
}
package com.hg.day09.demo02;
public class Zi extends Fu{
int numZi=20;
//int num=200;
public void methodZi() {
//int num=2000;
System.out.println("我是子类方法:"+num);
}
}
demo03
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 Fu {
public void methodFu() {
System.out.println("我是父类方法 methodFu");
}
public void method() {
System.out.println("我是父类方法 method");
}
}
package com.hg.day09.demo03;
public class Zi extends Fu{
public void methodZi(){
System.out.println("我是子类方法 methodZi");
}
@Override
public void method() {
System.out.println("我是子类方法 method");
}
}
demo04
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.demo04;
public class NewPhone extends Phone {
public void show() {
super.show();
System.out.println("显示头像");
System.out.println("显示归属地");
}
}
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("老手机显示号码");
}
}
demo05
package com.hg.day09.demo05;
public class Demo05Extends {
public static void main(String[] args) {
Zi zi=new Zi();
}
}
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 Zi extends Fu {
public Zi() {
super(20,"比心心");
System.out.println("子类无参数构造法");
}
}
demo06
package com.hg.day09.demo06;
public class Demo06Extends {
public static void main(String[] args){
Zi zi=new Zi();
zi.methodZi();
}
}
package com.hg.day09.demo06;
public class Fu {
int num=100;
public void method() {
System.out.println("父类方法");
}
}
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();
}
}