Day10-面向对象(3)

文章目录

  • 一、static(下)
  • 二、继承
  • 三、深入继承
  • 四、super
  • 五、重写
  • 六、访问修饰符


一、static(下)

  1. 修饰方法:类方法/静态方法,直接用类名调用

    应用场景:工具类

    注意:该类只是纯粹的功能,就可以把该类变为工具类,直接用类名调用静态方法即可

  1. 静态代码块:

    应用场景:初始化数据(功能和构造方法类似)
    构造方法 vs 代码块 vs 静态代码块

构造方法:创建对象时调用,初始化数据(成员变量、静态变量)

代码块:创建对象时优先于构造方法调用,初始化数据(成员变量、静态变量)

静态代码块:字节码文件加载到方法区时调用,初始化数据(静态变量
A类

package com.dream.test02;public class A {//构造方法在创建对象时被调用public A() {System.out.println("A类的无参构造");}//代码块在创建对象时优先于构造方法被调用{System.out.println("A类的代码块");}//静态代码块在A.class加载到方法区时被调用static{System.out.println("A类的静态代码块");}}

测试类

package com.dream.test02;public class Test01 {public static void main(String[] args) {/*** 静态代码块*/A a1 = new A();A a2 = new A();}
}

二、继承

含义:子类继承父类的属性和方法

语法:public class 子类 extends 父类{}

注意:一个类只能继承另一个类(单继承)

好处:减少代码的冗余

应用场景:多个类,拥有相同的属性和方法,就可以把这些相同的属性和方法抽取到父类中

人类

package com.dream.test03;public class Person {String name;char sex;int age;public void eat(){System.out.println("吃饭饭");}public void sleep(){System.out.println("睡觉觉");}}

中国人类

package com.dream.test03;//			 子类		  继承		  父类
public class Chinese extends Person{String chineseId;public void playTaiJi(){System.out.println("打太极");}
}

日本人类

package com.dream.test03;public class Japanese extends Person{String japaneseId;public void playVedio(){System.out.println("拍电影");}
}

测试类

package com.dream.test03;public class Test01 {public static void main(String[] args) {/*** 继承* * 需求:编写中国人和日本人* 分析:* 	人类:属性:姓名、年龄、性别	方法:吃饭饭、睡觉觉* 	中国人类:属性-chineseId	方法:打太极* 	日本人类:属性-japaneseId	方法:拍电影*/Chinese c = new Chinese();c.name = "杨晨";c.sex = '男';c.age = 18;System.out.println(c.name);System.out.println(c.sex);System.out.println(c.age);c.eat();c.sleep();c.chineseId = "123456789";System.out.println(c.chineseId);c.playTaiJi();Japanese j = new Japanese();j.name = "麻生希";j.sex = '女';j.age = 23;System.out.println(j.name);System.out.println(j.sex);System.out.println(j.age);j.eat();j.sleep();j.japaneseId = "987654321";System.out.println(j.japaneseId);j.playVedio();}}

三、深入继承

  1. 子类可以继承父类的私有化属性和方法吗?

    可以的

  2. 创建子类对象,会调用父类构造方法吗?

  3. 创建子类对象,调用父类构造方法的目的?

    在子类对象中开辟空间,用于存储父类的属性

  4. 创建子类对象,会创建父类对象吗?

    不会

  5. 创建子类对象,先调用父类构造方法还是子类构造方法?

    先调用子类构造方法

人类

package com.dream.test04;public class Person {private String name;private char sex;private int age;public Person() {System.out.println("Person类的构造方法");}public Person(String name, char sex, int age) {this.name = name;this.sex = sex;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void eat(){System.out.println("吃饭饭");}public void sleep(){System.out.println("睡觉觉");}private void fatherMethod01(){System.out.println("父类私有化方法");}public void fatherMethod02(){fatherMethod01();}}

中国人类

package com.dream.test04;//			 子类		  继承		  父类
public class Chinese extends Person{String chineseId;public Chinese() {//super();//默认实现调用父类的无参构造System.out.println("Chinese类的构造方法");}public void playTaiJi(){System.out.println("打太极");}
}

日本人类

package com.dream.test04;public class Japanese extends Person{String japaneseId;public Japanese() {}public void playVedio(){System.out.println("拍电影");}
}

测试类

package com.dream.test04;public class Test01 {public static void main(String[] args) {/*** 深入继承* * 1.子类可以继承父类的私有化属性和方法吗?* 	可以继承,但是不可以直接调用* * 2.创建子类对象,会调用父类构造方法吗?* 	会* * 3.创建子类对象,调用父类构造方法的目的?*  在子类对象中开辟空间,用于存储父类的属性*  * 4.创建子类对象,会创建父类对象吗?*  不会*  * 5.创建子类对象,先调用父类构造方法还是子类构造方法?*  先调用子类构造方法*  * 6.创建子类对象,先完成父类构造方法还是子类构造方法? * 	先完成父类构造方法* */Chinese c = new Chinese();c.setName("杨晨");System.out.println(c.getName());c.fatherMethod02();}}

四、super

含义:父类

作用:

  1. super.属性:在子类中,调用父类非私有化属性

  2. super.方法:在子类中,调用父类非私有化方法

  3. super():在子类中,调用父类非私有化构造方法
    人类

package com.dream.test05;public class Person {private String name;private char sex;private int age;public Person() {}public Person(String name, char sex, int age) {this.name = name;this.sex = sex;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void eat(){System.out.println(this.name + "吃饭饭");}public void sleep(){System.out.println(this.name + "睡觉觉");}}

中国人类

package com.dream.test05;public class Chinese extends Person{private String chineseId;public Chinese() {}public Chinese(String chineseId) {this.chineseId = chineseId;}public Chinese(String name,char sex,int age,String chineseId){//调用父类的非私有化构造方法super(name, sex, age);this.chineseId = chineseId;}public void playTaiJi(){//调用父类的非私有化方法System.out.println(super.getName() + "打太极");}
}

日本人类

package com.dream.test05;public class Japanese extends Person{private String japaneseId;public Japanese() {}public Japanese(String name, char sex, int age, String japaneseId) {super(name, sex, age);this.japaneseId = japaneseId;}public void playVedio(){System.out.println(super.getName() + "拍电影");}
}

测试类

package com.dream.test05;public class Test01 {public static void main(String[] args) {/*** super* */Chinese c = new Chinese("大牛", '男', 18, "123456789");c.eat();c.playTaiJi();}}

五、重写

含义:将父类里的方法,在子类中重新写一遍

应用场景:父类方法不满足子类需求时,考虑使用重写

条件:

  1. 在子类中

  2. 返回值、方法名、参数列表必须和父类重写的方法一致

  3. 访问修饰符不能比父类更严格

人类

package com.dream.test06;public class Person {private String name;private char sex;private int age;public Person() {}public Person(String name, char sex, int age) {this.name = name;this.sex = sex;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void eat(){System.out.println(this.name + "吃饭饭");}public void sleep(){System.out.println(this.name + "睡觉觉");}}

中国人类

package com.dream.test06;public class Chinese extends Person{private String chineseId;public Chinese() {}public Chinese(String name, char sex, int age, String chineseId) {super(name, sex, age);this.chineseId = chineseId;}public String getChineseId() {return chineseId;}public void setChineseId(String chineseId) {this.chineseId = chineseId;}public void playTaiJi(){System.out.println(super.getName() + "打太极");}//@Override注解:重写//注释:给程序员解释的//注解:既给程序员解释,也给程序解释@Overridepublic void eat() {System.out.println(super.getName() + "吃山珍海味");}
}

日本人类

package com.dream.test06;public class Japanese extends Person{private String japaneseId;public Japanese() {}public Japanese(String name, char sex, int age, String japaneseId) {super(name, sex, age);this.japaneseId = japaneseId;}public String getJapaneseId() {return japaneseId;}public void setJapaneseId(String japaneseId) {this.japaneseId = japaneseId;}public void playVedio(){System.out.println(super.getName() + "拍电影");}@Overridepublic void eat() {System.out.println(super.getName() + "吃马赛克");}
}

测试类

package com.dream.test06;public class Test01 {public static void main(String[] args) {/*** 重写:* * 需求:编写中国人和日本人* * 含义:方法与方法之间的关系* 条件:* 	1.重写的位置是在子类中* 	2.返回值类型、方法名、参数列表必须和父类重写的方法一致*  3.访问修饰符不能比父类更要严格*  * 应用场景:父类里的方法不能改变时,并且父类的方法不满足子类需求时,在子类重写父类的方法* */Chinese c = new Chinese("杨晨", '男', 18, "123456789");c.eat();Japanese j = new Japanese("波多野结衣", '女', 23, "987654321");j.eat();}}

六、访问修饰符

访问修饰符本类本包同包子类不同包不同包子类
privateok
default(默认权限)okokok
protectedokokokok
publicokokokokok


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部