Day10-面向对象(3)
文章目录
- 一、static(下)
- 二、继承
- 三、深入继承
- 四、super
- 五、重写
- 六、访问修饰符
一、static(下)
修饰方法:类方法/静态方法,直接用类名调用
应用场景:工具类
注意:该类只是纯粹的功能,就可以把该类变为工具类,直接用类名调用静态方法即可
静态代码块:
应用场景:初始化数据(功能和构造方法类似)
构造方法 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();}}
三、深入继承
子类可以继承父类的私有化属性和方法吗?
可以的
创建子类对象,会调用父类构造方法吗?
会
创建子类对象,调用父类构造方法的目的?
在子类对象中开辟空间,用于存储父类的属性
创建子类对象,会创建父类对象吗?
不会
创建子类对象,先调用父类构造方法还是子类构造方法?
先调用子类构造方法
人类
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
含义:父类
作用:
super.属性:在子类中,调用父类非私有化属性
super.方法:在子类中,调用父类非私有化方法
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();}}
五、重写
含义:将父类里的方法,在子类中重新写一遍
应用场景:父类方法不满足子类需求时,考虑使用重写
条件:
在子类中
返回值、方法名、参数列表必须和父类重写的方法一致
访问修饰符不能比父类更严格
人类
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();}}
六、访问修饰符
访问修饰符 本类 本包 同包子类 不同包 不同包子类 private ok default(默认权限) ok ok ok protected ok ok ok ok public ok ok ok ok ok
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
