200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > JAVA day06 继承 super 方法的重写 抽象类

JAVA day06 继承 super 方法的重写 抽象类

时间:2024-02-02 04:00:51

相关推荐

JAVA day06 继承 super 方法的重写 抽象类

1.继承(extends)

继承涉及到两个类,子类(扩展类/衍生类)跟父类(基类/超类)

当多个类中存在相同属性和行为时,将这些内容单独提取到一个类,那么多个类里就不用再定义这些属性和行为了,只要继承提取出来的那个类就行了。

继承:就是子类继承父类的属性和行为,那么子类就拥有了父类的成员变量跟成员方法。

成员变量

当子类跟父类中的成员变量不重名时,访问无影响。当子类跟父类中的成员变量重名时,需用到super关键字来调用父类的成员变量:super.变量名。

成员方法/构造方法

当子类跟父类中的成员方法不重名时,访问无影响。当子类跟父类中的成员方法重名时,则需方法重写(Override)。在子类构造方法中一定都会先默认调用父类的无参构造方法super();,若父类没有无参构造方法,则需手动在子类构造方法中调用父类的构造方法,super(); 且只能放在构造器第一行。

建议:所有存在父子类关系的类中,建议父类先添加无参构造方法,这样方便子类使用。

方法重写(Override)

子类中出现与父类一模一样的方法时(方法名,返回值类型,修饰符,方法的参数都一样),会出现覆盖效果,称为重写或复写。

继承的特点:

Java只支持单继承,不支持多继承。class C extends A{} // ok class C extends A,B... // errorJava支持多层继承。class A {} class B extends A {} class C extends B {}顶层父类是Object类,基本上,所有类的父类都是Obiect类。

代码说明

//主方法public class Main {public static void main(String[] args) {//类加载先加载父类,再加载子类Dog dog = new Dog("汪汪汪","小白",2);//2岁的小白汪汪汪dog.bite();//小白咬拖鞋dog.eat();//继承父类中的成员方法,能直接调用;小白干饭Cat cat = new Cat("喵喵喵");//喵喵喵cat.name = "敦敦";cat.sleep();//敦敦呼呼大睡cat.stick();//敦敦喵喵蹭蹭你的腿cat.eat();//敦敦干饭//很开心}}//父类//一个父类可以有多个子类//像Animal这样的类也有一个父类:Objectpublic class Animal {int age;String name;Animal(){}void eat(){System.out.println(name+"干饭");}void sleep(){System.out.println(name+"呼呼大睡");}}//子类Dog//子类继承父类的成员变量跟成员方法public class Dog extends Animal{String w ;Dog(){}Dog(String w,String name,int age){//当前对象的成员变量this.w = w;//使用super关键字访问父类中的成员变量super.name = name;super.age = age;System.out.println(age+"岁的"+name+w);}void bite(){System.out.println(name+"咬拖鞋");}}//子类//子类的功能一般比父类多public class Cat extends Animal {String m;Cat(){}Cat(String m){this.m = m;System.out.println(m);}void stick(){System.out.println(name+"喵喵蹭蹭你的腿");}@Override//方法的重写void eat() {super.eat();System.out.println("很开心");}}

1.super跟this的区别

super:代表父类的引用

this:代表当前对象的引用

2.super跟this的用法

访问成员: this.成员变量 -- 本类的 super.成员变量 -- ⽗类的 this.成员⽅法名() -- 本类的 super.成员⽅法名() -- ⽗类的 访问构造方法: this(...) -- 本类的构造⽅法 super(...) -- ⽗类的构造⽅法 ⼦类的每个构造⽅法中均有默认的super(),调⽤⽗类的空参构造。⼿动调⽤⽗类构造 会覆盖默认的super()。 super() 和 this() 都必须是在构造⽅法的第⼀⾏,所以不能同时出现。

2.抽象类(abstract)

使用abstract关键词修饰的类,叫做抽象类。

1.抽象方法

抽象方法只包含一个方法名,它没有方法体。

修饰符 abstract 返回值类型 ⽅法名 (参数列表);

一个类可以有多个抽象方法。

2.抽象的使用

a.成员变量是不可能是抽象的,因为都是具体的类型,具体的值。

b.继承抽象类的⼦类必须重写⽗类所有的抽象⽅法。否则,该⼦类也必须声明为抽象类。

3.注意

抽象类不能创建对象,也就是实例化。抽象类中,可以有构造⽅法,是供⼦类创建对象时,初始化⽗类成员使⽤的。 抽象类中,不⼀定包含抽象⽅法,但是有抽象⽅法的类必定是抽象类。 抽象类的⼦类,必须重写抽象⽗类中所有的抽象⽅法,否则,编译⽆法通过⽽报错。除⾮该 ⼦类也是抽象类。

代码说明

/** 要求:使用抽象类实现基类Employer* 包含姓名,部门,和工资 三个属性* 显示工资的方法showSalary()和显示奖金的方法showBonus()* 要求输入两个不同的员工信息,并输出其个人信息** 例如:* 输入:* 张三 前台 5000* 李四 开发 6000 4000* 显示:* 我叫张三,在前台部门,我的工资是5000.0* 我是普通员工,没有奖金,加油升级!* 我叫李四,在开发部门,我的工资是6000.0* 我是优秀员工,我的奖金是4000.0!*/public class Main {public static void main(String[] args) {Common c = new Common("张三","前台",5000.0);c.showSalary();c.showBonus();Excellent e = new Excellent("李四","开发",6000.0,4000.0);e.showSalary();e.showBonus();}}//抽象父类public abstract class Employer {String name;String department;double salary;double bonus;//无参构造方法Employer(){}//抽象类没有方法体abstract void showSalary();abstract void showBonus();}//普通员工子类继承抽象父类,需要重写方法class Common extends Employer{Common(){}Common(String name, String department, double salary){this.name = name;this.department = department;this.salary = salary;}@Overridevoid showSalary() {System.out.println("我叫"+name+",在"+department+"部门"+"我的工资是"+salary);}@Overridevoid showBonus() {System.out.println("我是普通员工,没有奖金,加油升级!");}}//优秀员工子类class Excellent extends Employer{Excellent(){}Excellent(String name, String department, double salary, double bonus){this.name = name;this.department = department;this.salary = salary;this.bonus = bonus;}@Overridevoid showSalary() {System.out.println("我叫"+name+",在"+department+"部门"+"我的工资是"+salary);}@Overridevoid showBonus() {System.out.println("我是优秀员工,我的奖金是"+bonus);}}

方法重载跟方法重写的区别

方法重载:在同一个类中,方法名一样,方法参数不一样的几个方法,称为方法重载。

方法重写:子类中出现与父类一模一样的方法时(方法名,返回值类型,修饰符,方法的参数都一样),会出现覆盖效果,称为重写或复写。

重载需在同一个类中;重写需要存在父子类继承关系。

详细区别见下方链接

/weixin_44502804/article/details/90523478

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。