Java day016 面向对象3.0(类的包含、继承,匿名对象)
1.类与类的关系之包含
要求:
Pc
屏幕
屏幕名字
屏幕大小
键盘
键盘名字
键帽个数
方法
更换键盘与屏幕
展示屏幕与键盘
屏幕类代码
package com.qfedu.study.object.computer;
/**
* 屏幕类
*/
public class Screen {
//成员变量Field
private String name;
private float size;
//无参构造方法 Constructor
public Screen() {
}
//有参构造方法
public Screen(String name, float size) {
this.name = name;
this.size = size;
}
//getter 和 setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getSize() {
return size;
}
public void setSize(float size) {
this.size = size;
}
}
键盘类代码
public class Keyboard {
private String name;
private int keycap;
public Keyboard() {
super();
}
public Keyboard(String name, int keycap) {
super();
this.name = name;
this.keycap = keycap;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKeycap() {
return keycap;
}
public void setKeycap(int keycap) {
this.keycap = keycap;
}
}
Pc类代码
package com.qfedu.study.object.computer;
public class Computer {
//成员变量Field
//自定义Screen类对象与Keyboard类对象作为Pc类的成员变量
private Screen screen;
private Keyboard keyboard;
public Computer() {
}
public Computer(Screen screen, Keyboard keyboard) {
this.screen = screen;
this.keyboard = keyboard;
}
public void show() {
System.out.println("当前电脑屏幕:" + screen.getName() + " 尺寸:" + screen.getSize());
System.out.println("当前键盘:" + keyboard.getName() + " 键帽个数:" + keyboard.getKeycap());
}
public void setScreen(Screen screen) {
this.screen = screen;
}
public Keyboard getKeyboard() {
return keyboard;
}
public void setKeyboard(Keyboard keyboard) {
this.keyboard = keyboard;
}
public Screen getScreen() {
return screen;
}
}
主函数
package com.qfedu.study.object.computer;
public class PlayComputer {
public static void main(String[] args) {
//创建Computer类对象computer
Computer computer = new Computer(new Screen("AOC", 15.6F), new Keyboard("IKBC", 87));
//展示computer
computer.show();
System.out.println("---------------------------");
//更换屏幕与键盘
computer.setScreen(new Screen("卓威", 24F));
computer.setKeyboard(new Keyboard("罗技", 87));
//展示
computer.show();
}
}
/*
输出结果:
当前电脑屏幕:AOC 尺寸:15.6
当前键盘:IKBC 键帽个数:87
---------------------------
当前电脑屏幕:卓威 尺寸:24.0
当前键盘:罗技 键帽个数:87
*/
注意
在上面的主函数中,所有的操作全是依靠对象来进行的,对象是代码的核心!
2.匿名对象
格式:
new 构造方法(所需参数)
用途:
- 简化代码结构;
- 提高开发效率,匿名对象当行使用后如果没有其它引用数据类型保存其地址直接销毁;
- 通过匿名对象直接调用成员方法;
- 使用匿名对象作为方法的参数;
示例:
Computer computer = new Computer(new Screen("AOC", 15.6F), new Keyboard("IKBC", 87));
computer.show();
System.out.println("---------------------------");
computer.setScreen(new Screen("卓威", 24F));
computer.setKeyboard(new Keyboard("罗技", 87));
这里的new Screen(“AOC”, 15.6F)与new Keyboard(“IKBC”, 87)就是匿名对象作为构造方法的参数直接使用,
这样不用创建新的对象,既节省了空间,又优化了代码结构。
注意:
匿名对象禁止使用成员变量!
3.类与类的关系之继承
个人对于继承的理解
我认为继承关系就是类与类从一般到特殊的关系,比如学生---->研究生,人类---->男人
关键字
extends
格式
public A extends B {
}
A是B的一个字类;
B是A唯一的父类;
一个子类有且只有一个父类!
示例
父类
public class Student {
private String name;
public String school;
public void study() {
System.out.println("读书!");
}
private void findFriend() {
System.out.println("找到一个朋友");
}
}
子类
public class Undergraduate extends Student {
public int age;
public void play() {
System.out.println("play!");
}
}
主函数
public class test {
public static void main(String[] args) {
Undergraduate undergraduate = new Undergraduate();
undergraduate.school = "大学";
System.out.println(undergraduate.school);
undergraduate.study();
}
}
/*
输出结果:
大学
读书!
*/
总结
- 子类继承父类后可以得到父类公开的成员变量与成员方法
- 子类继承父类后得不到父类私有的成员变量与成员方法
注意
有其父才有其子
在创建子类对象时会先调用父类无参构造方法!