01 面向对象之继承
public class Inheritance02 {
public class Person {
private String nickname;
private int gender;
private int age;
}
public class Boy extends Person{
}
public class Girl extends Person{
}
}
02 面向对象之继承代码实现
public class Inheritance03 {
public static class Person {
private String nickname;
private int gender;
private int age;
public Person() {
}
public Person(String nickname, int gender, int age) {
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static class Boy extends Person {
}
public static class Girl extends Person {
}
}
import Inheritance03;
import org.junit.jupiter.api.Test;
public class Inheritance03Test {
@Test
public void test01() {
Inheritance03.Person person = new Inheritance03.Person("姓名", 1, 999);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
@Test
public void test02() {
Inheritance03.Boy person = new Inheritance03.Boy();
person.setNickname("姓名");
person.setGender(1);
person.setAge(20);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
@Test
public void test03() {
Inheritance03.Girl person = new Inheritance03.Girl();
person.setNickname("姓名");
person.setGender(0);
person.setAge(28);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
private String nickname;
private int gender;
private int age;
public Person() {
}
public Person(String nickname, int gender, int age) {
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static class Boy extends Person {
public Boy() {
}
public Boy(String nickname, int gender, int age) {
super(nickname, gender, age);
}
}
public static class Girl extends Person {
public Girl() {
}
public Girl(String nickname, int gender, int age) {
super(nickname, gender, age);
}
}
}
import Inheritance04;
import org.junit.jupiter.api.Test;
public class Inheritance04Test {
@Test
public void test01() {
Inheritance04.Person person = new Inheritance04.Person("姓名", 1, 999);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
@Test
public void test02() {
Inheritance04.Boy person = new Inheritance04.Boy("姓名", 1, 20);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
@Test
public void test03() {
Inheritance04.Girl person = new Inheritance04.Girl("姓名", 0, 18);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
}
04 子父类实例化顺序
public class Inheritance05 {
public static class Person {
private String nickname;
private int gender;
private int age;
public Person() {
System.out.println("我是Person类的无参构造方法");
}
public Person(String nickname, int gender, int age) {
System.out.println("我是Person类的有参构造方法");
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static class Boy extends Person {
public Boy() {
System.out.println("我是Boy类的无参构造方法");
}
public Boy(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Boy类的有参构造方法");
}
}
public static class Girl extends Person {
public Girl() {
System.out.println("我是Girl类的无参构造方法");
}
public Girl(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Girl类的有参构造方法");
}
}
}
import Inheritance05;
import org.junit.jupiter.api.Test;
public class Inheritance05Test {
@Test
public void test01() {
Inheritance05.Person person = new Inheritance05.Person("创世之神", 1, 999);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
@Test
public void test02() {
Inheritance05.Boy person = new Inheritance05.Boy("姓名", 1, 20);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
@Test
public void test03() {
Inheritance05.Girl person = new Inheritance05.Girl("姓名", 0, 18);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
}
05 父类的引用指向子类的实例化对象
public class Inheritance06 {
public static class Person {
private String nickname;
private int gender;
private int age;
public Person() {
System.out.println("我是Person类的无参构造方法");
}
public Person(String nickname, int gender, int age) {
System.out.println("我是Person类的有参构造方法");
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static class Boy extends Person {
public Boy() {
System.out.println("我是Boy类的无参构造方法");
}
public Boy(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Boy类的有参构造方法");
}
}
public static class Girl extends Person {
public Girl() {
System.out.println("我是Girl类的无参构造方法");
}
public Girl(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Girl类的有参构造方法");
}
}
}
import Inheritance06;
import org.junit.jupiter.api.Test;
public class Inheritance06Test {
@Test
public void test01() {
Inheritance06.Person person = new Inheritance06.Person("创世之神", 1, 10000);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
@Test
public void test02() {
Inheritance06.Person person = new Inheritance06.Boy("姓名", 1, 20);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
@Test
public void test03() {
Inheritance06.Person person = new Inheritance06.Girl("姓名", 0, 18);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
}
06 子类可以拥有单独的方法,无法直接调用子类中的方法
public class Inheritance07 {
public static class Person {
private String nickname;
private int gender;
private int age;
public Person() {
System.out.println("我是Person类的无参构造方法");
}
public Person(String nickname, int gender, int age) {
System.out.println("我是Person类的有参构造方法");
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static class Boy extends Person {
public Boy() {
System.out.println("我是Boy类的无参构造方法");
}
public Boy(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Boy类的有参构造方法");
}
public void work(){
System.out.println("看这边都是朕为你打下江山");
}
}
public static class Girl extends Person {
public Girl() {
System.out.println("我是Girl类的无参构造方法");
}
public Girl(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Girl类的有参构造方法");
}
public void beauty() {
System.out.println("男人征服了世界,而女人征服了男人");
}
}
}
import Inheritance07;
import org.junit.jupiter.api.Test;
public class Inheritance07Test {
@Test
public void test01() {
Inheritance07.Person person = new Inheritance07.Person("创世之神", 1, 10000);
System.out.println("姓名 >>> " + person.getNickname());
System.out.println("性别 >>> " + (person.getGender() == 1 ? "小伙儿" : "老妹儿"));
System.out.println("年龄 >>> " + person.getAge());
}
@Test
public void test02() {
Inheritance07.Boy boy = new Inheritance07.Boy();
boy.work();
Inheritance07.Person person = new Inheritance07.Boy("姓名", 1, 20);
// person.work();
}
@Test
public void test03() {
Inheritance07.Girl girl = new Inheritance07.Girl();
girl.beauty();
Inheritance07.Person person = new Inheritance07.Girl("姓名", 0, 18);
// person.beauty();
}
}
07 方法重写
public class Inheritance08 {
public static class Person {
private String nickname;
private int gender;
private int age;
public Person() {
System.out.println("我是Person类的无参构造方法");
}
public Person(String nickname, int gender, int age) {
System.out.println("我是Person类的有参构造方法");
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void eat() {
System.out.println("吃吃吃");
}
}
public static class Boy extends Person {
public Boy() {
System.out.println("我是Boy类的无参构造方法");
}
public Boy(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Boy类的有参构造方法");
}
public void work(){
System.out.println("看这边都是朕为你打下江山");
}
}
public static class Girl extends Person {
public Girl() {
System.out.println("我是Girl类的无参构造方法");
}
public Girl(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Girl类的有参构造方法");
}
public void beauty() {
System.out.println("男人征服了世界,而女人征服了男人");
}
}
}
import Inheritance08;
import org.junit.jupiter.api.Test;
public class Inheritance08Test {
@Test
public void test01() {
Inheritance08.Person person = new Inheritance08.Person("创世之神", 1, 10000);
person.eat();
}
@Test
public void test02() {
Inheritance08.Boy boy = new Inheritance08.Boy();
boy.work();
boy.eat();
Inheritance08.Person person = new Inheritance08.Boy("姓名", 1, 20);
person.eat();
}
@Test
public void test03() {
Inheritance08.Girl girl = new Inheritance08.Girl();
girl.beauty();
girl.eat();
Inheritance08.Person person = new Inheritance08.Girl("姓名", 0, 18);
person.eat();
}
}
08 方法重写与方法重载
public class Inheritance09 {
public static class Person {
private String nickname;
private int gender;
private int age;
public Person() {
System.out.println("我是Person类的无参构造方法");
}
public Person(String nickname, int gender, int age) {
System.out.println("我是Person类的有参构造方法");
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void eat() {
System.out.println("吃吃吃");
}
}
public static class Boy extends Person {
public Boy() {
System.out.println("我是Boy类的无参构造方法");
}
public Boy(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Boy类的有参构造方法");
}
public void work(){
System.out.println("看这边都是朕为你打下江山");
}
@Override
public void eat() {
System.out.println("吃核桃");
}
}
public static class Girl extends Person {
public Girl() {
System.out.println("我是Girl类的无参构造方法");
}
public Girl(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Girl类的有参构造方法");
}
public void beauty() {
System.out.println("男人征服了世界,而女人征服了男人");
}
@Override
public void eat() {
System.out.println("吃荔枝");
}
}
}
import Inheritance09;
import org.junit.jupiter.api.Test;
public class Inheritance09Test {
@Test
public void test01() {
Inheritance09.Person person = new Inheritance09.Person("创世之神", 1, 10000);
person.eat();
}
@Test
public void test02() {
Inheritance09.Boy boy = new Inheritance09.Boy();
boy.work();
boy.eat();
Inheritance09.Person person = new Inheritance09.Boy("姓名", 1, 20);
person.eat();
}
@Test
public void test03() {
Inheritance09.Girl girl = new Inheritance09.Girl();
girl.beauty();
girl.eat();
Inheritance09.Person person = new Inheritance09.Girl("姓名", 0, 18);
person.eat();
}
}
09 向上转型与向下转型
public class Inheritance10 {
public static class Person {
private String nickname;
private int gender;
private int age;
public Person() {
System.out.println("我是Person类的无参构造方法");
}
public Person(String nickname, int gender, int age) {
System.out.println("我是Person类的有参构造方法");
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void eat() {
System.out.println("吃吃吃");
}
}
public static class Boy extends Person {
public Boy() {
System.out.println("我是Boy类的无参构造方法");
}
public Boy(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Boy类的有参构造方法");
}
public void work(){
System.out.println("看这边都是朕为你打下江山");
}
@Override
public void eat() {
System.out.println("吃核桃");
}
}
public static class Girl extends Person {
public Girl() {
System.out.println("我是Girl类的无参构造方法");
}
public Girl(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Girl类的有参构造方法");
}
public void beauty() {
System.out.println("男人征服了世界,而女人征服了男人");
}
@Override
public void eat() {
System.out.println("吃荔枝");
}
}
}
import Inheritance10;
import org.junit.jupiter.api.Test;
public class Inheritance10Test {
@Test
public void test01() {
Inheritance10.Person person = new Inheritance10.Person("创世之神", 1, 10000);
person.eat();
// 向下转型 注意 只有该对象本身就是子类类型的时候向下转型才会成功
Inheritance10.Boy boy = (Inheritance10.Boy) person;
//java.lang.ClassCastException: class Day13.Inheritance10$Person cannot be cast to class Day13.Inheritance10$Boy (Day13.Inheritance10$Person and Day13.Inheritance10$Boy are in unnamed module of loader 'app')
// boy.eat();
}
@Test
public void test02() {
// 父类的引用指向子类的实例化对象 向上转型 向上转型自动转
Inheritance10.Boy person = new Inheritance10.Boy("李昊哲", 1, 40);
person.eat();
// person.work();
// 向下转型
Inheritance10.Boy boy = person;
boy.eat();
boy.work();
}
@Test
public void test03() {
Inheritance10.Person person = new Inheritance10.Girl("李哲", 0, 28);
person.eat();
// 向下转型
Inheritance10.Girl girl = (Inheritance10.Girl) person;
girl.eat();
girl.beauty();
}
}
10 final修饰类和方法
public class Inheritance11 {
public class Person {
private String nickname;
private int gender;
private int age;
public Person() {
System.out.println("我是Person类的无参构造方法");
}
public Person(String nickname, int gender, int age) {
System.out.println("我是Person类的有参构造方法");
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void eat() {
System.out.println("吃吃吃");
}
}
public class Boy extends Person {
public Boy() {
System.out.println("我是Boy类的无参构造方法");
}
public Boy(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Boy类的有参构造方法");
}
public void work(){
System.out.println("看这边都是朕为你打下江山");
}
@Override
public void eat() {
System.out.println("吃核桃");
}
}
public class Girl extends Person {
public Girl() {
System.out.println("我是Girl类的无参构造方法");
}
public Girl(String nickname, int gender, int age) {
super(nickname, gender, age);
System.out.println("我是Girl类的有参构造方法");
}
public void beauty() {
System.out.println("男人征服了世界,而女人征服了男人");
}
@Override
public void eat() {
System.out.println("吃荔枝");
}
}
}
11 方法重写与方法重载综合例子
public class InheritanceTest {
public static void main(String[] args) {
Goo goo = new Goo();
Super s = new Sub();
goo.g(s);
// 输出结果:g(Super).. Sub.f()
// 重载看类型 重写看对象
// 眼睛就是显示器 大脑就是编译器
}
}
class Super {
public void f() {
System.out.println("Super.f()");
}
}
class Sub extends Super {
@Override
public void f() {
System.out.println("Sub.f()");
}
}
class Goo {
public void g(Super obj) {
System.out.println("g(Super)..");
obj.f();
}
public void g(Sub obj) {
System.out.println("g(Sub)..");
obj.f();
}
}
12 匿名内部类
package Inner;
public class Outer01 {
public static class Inner{
public static Object Outer01;
public static void run(){
System.out.println("加油吧少年");
}
}
}
package Inner;
public class Outer02 {
public class Inner{
public static Object Outer02;
public static void run(){
System.out.println("加油吧少年");
}
}
}
package Inner;
public class Outer03 {
public class Inner{
public void run(){
System.out.println("加油吧少年");
}
}
}
package Inner;
public class Outer04 {
public class Inner {
public void run() {
System.out.println("加油吧少年");
}
}
public void innerRun() {
new Inner().run();
}
}
package Inner;
public class Outer05 {
public static void innerRun() {
class Inner {
public static void run() {
System.out.println("加油吧少年");
}
}
Inner.run();
}
}
package Inner;
public class Outer06 {
public static void innerRun() {
class Inner {
public void run() {
System.out.println("加油吧少年");
}
}
new Inner().run();
}
}
package Inner;
public class Outer07 {
public void innerRun() {
class Inner {
public void run() {
System.out.println("加油吧少年");
}
}
new Inner().run();
}
}
package Inner;
public class Outer08 {
public void innerRun() {
class Inner{}
new Inner(){
public void run(){
System.out.println("加油吧少年");
}
};
}
}
package Inner;
public class Outer09 {
public void innerRun() {
class Inner{}
new Inner(){
public void run(){
System.out.println("加油吧少年");
}
}.run();
}
}
package Inner;
public class Outer10 {
public void innerRun() {
new Object(){
public void run(){
System.out.println("加油吧少年");
}
}.run();
}
}
import Day13Inner.*;
import org.junit.jupiter.api.Test;
public class Day13InnerTest {
@Test
public void outer01(){
Outer01.Inner.run();
}
//加油吧少年
@Test
public void outer02(){
Outer02.Inner.run();
}
//加油吧少年
@Test
public void outer03(){
new Outer03().new Inner().run();
}
//加油吧少年
@Test
public void outer04(){
new Outer04().innerRun();
}
//加油吧少年
@Test
public void outer05(){
Outer05.innerRun();
}
//加油吧少年
@Test
public void outer06(){
Outer06.innerRun();
}
//加油吧少年
@Test
public void outer07(){
new Outer07().innerRun();
}
/加油吧少年
@Test
public void outer08(){
new Outer08().innerRun();
}
//
@Test
public void outer09(){
new Outer09().innerRun();
}
//加油吧少年
@Test
public void outer10(){
new Outer10().innerRun();
}
//加油吧少年
}