当前位置: 代码迷 >> 综合 >> day07 面向对象 继承
  详细解决方案

day07 面向对象 继承

热度:5   发布时间:2024-01-17 14:42:51.0

面向对象

继承

object类

package com.oop.demo05;public class Application {
    public static void main(String[] args) {
    Student s1 = new Student();s1.say();//说了一句话s1.setMoney(10_0000_0000);System.out.println(s1.getMoney());//10_0000_0000}
}
package com.oop.demo05;//java 中 所有的类,都默认继承object类
//Person 人
public class Person {
    //public//private//default//protected//一般属性才是私有的private int money ;public int getMoney() {
    return money;}public void setMoney(int money) {
    this.money = money;}public void say(){
    System.out.println("说了一句话");}}
package com.oop.demo05;//学生 is 人 :派生类 ,子类
//子类继承了父类,就会拥有父类的所有方法
public class Student extends Person{
    //Ctrl + h
}

super详解

package com.oop.demo06;public class Application {
    public static void main(String[] args) {
    Student s1 = new Student();//无参构造器Person/有参构造ni 无参构造器Students1.test("wo");//wo 允儿 Yoonas1.test1();// Student Person}
}
package com.oop.demo06;public class Person {
    public Person() {
    System.out.println("无参构造器Person");}public Person(String name) {
    System.out.println("有参构造" + name);}protected String name = "Yoona";//私有的东西无法被继承!public void print() {
    System.out.println("Person");}
}
package com.oop.demo06;public class Student extends Person {
    public Student() {
    //隐藏代码:调用了父类的无参构造。//有参构造必须显式表达super("ni");//在代码第一行//this super二选一System.out.println("无参构造器Student");}private String name = "允儿";public void print() {
    System.out.println("Student");}public void test1() {
    this.print();//Studentsuper.print();//Person}public void test(String name) {
    System.out.println(name);//woSystem.out.println(this.name);//允儿System.out.println(super.name);//Yoona}
}
注意点一
super注意点:
1.super是调用父类的构造方法,必须是构造方法的第一个
2.super必须只能出现在子类的方法或者构造方法中!
3.superthis不能同时调用构造方法!
Vs this:
代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的应用
前提
this:没有继承的情况下也可以使用
super:只能在继承条件下次才可以使用
构造方法
this():本类的构造
super():父类的构造

重写

package com.oop.demo06;public class Application {
    //静态方法和非静态方法有区别//静态方法:方法的调用只和左边的类型有关//非静态方法:重写public static void main(String[] args) {
    A a = new A();a.test();//静态:A=>test() //非静态:A=>test()//父类的引用指向子类B b = new A();//子类重写了父类的方法b.test();//静态:B=>test() //非静态:A=>test()}
}
package com.oop.demo06;
//重写都是方法的重写 ,和属性无关
public class B {
    public  void test(){
    System.out.println("B=>test()");}}
package com.oop.demo06;public class A extends B {
    //override重写@Override//注解:有功能的注释//只能是public 不能privatepublic void test() {
    System.out.println("A=>test()");}
}
注意点二
重写:
需要有继承关系,子类重写父类的方法!
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大,但不能缩小 public>protected>default>private
4.抛出异常:范围可以被缩小,但不能扩大:ClassNotFoundException -->Exception(大)重写,子类方法与父类必须一致:方法体不同!为什么需要重写:
1.父类的功能,子类不一定需要,或者不一定满足!
Alt+Insert :override