1. 多类合作
1.1 PC类
屏幕
屏幕可以看做是一个类
成员变量:
品牌
尺寸
键盘
键盘也可以看做是一个类
成员变量:
品牌
按键个数
PC电脑类
成员变量:
键盘类对象
屏幕类对象
成员方法:
换屏幕
换键盘
1.2 屏幕类代码实现
package com. qfedu. a. computer;
public class Screen {
private String name;
private float size;
public Screen ( ) { }
public Screen ( String name, float size) {
this . name = name;
this . size = size;
}
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;
}
}
1.3 键盘类代码实现
package com. qfedu. a. computer;
public class Keyboard {
private String name;
private int keyCount;
public Keyboard ( ) { }
public Keyboard ( String name, int keyCount) {
this . name = name;
this . keyCount = keyCount;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public int getKeyCount ( ) {
return keyCount;
}
public void setKeyCount ( int keyCount) {
this . keyCount = keyCount;
}
}
1.4 PC类代码实现
package com. qfedu. a. computer;
public class PC {
private Screen screen;
private Keyboard keyboard;
public PC ( ) { }
public PC ( 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. getKeyCount ( ) ) ;
}
public void setScreen ( Screen screen) {
this . screen = screen;
}
public Screen getScreen ( ) {
return screen;
}
public void setKeyboard ( Keyboard keyboard) {
this . keyboard = keyboard;
}
public Keyboard getKeyboard ( ) {
return keyboard;
}
}
1.5 main方法代码
package com. qfedu. a. computer;
public class Demo {
public static void main ( String[ ] args) {
Screen screen = new Screen ( "三星" , 15.6F ) ;
Keyboard keyboard = new Keyboard ( "双飞燕" , 104 ) ;
PC pc = new PC ( screen, keyboard) ;
pc. show ( ) ;
System. out. println ( "---------------------" ) ;
Screen screen2 = new Screen ( "BOE" , 24F ) ;
pc. setScreen ( screen2) ;
pc. show ( ) ;
System. out. println ( "---------------------" ) ;
Keyboard keyboard2 = new Keyboard ( "阿米洛" , 87 ) ;
pc. setKeyboard ( keyboard2) ;
pc. show ( ) ;
System. out. println ( "---------------------" ) ;
}
}
1.6 多类合作代码总结
1. 类和对象的操作模式
类是数据类型定义
对象是目前操作成员方法, 操作成员变量的核心
2. 这两组代码在main方法中基本上全部是一个面向对象思想
a. 自定义数据类型, 自定义类对象, 作为方法参数
b. 通过类对象来操作代码方式, 所有的内容都是和对象相关
3. 代码需要阅读, 一定要阅读!!
不要断章取义
. ==> "的"
4. 代码要什么你给什么
2. 匿名对象
2.1 匿名对象概述
Person person = new Person ( "骚杰" , 66 , '男' ) ;
Person 类名
person 对象名
new Person ( . . . ) 向内存的堆区申请空间, 创建一个Perosn类对象使用的内存空间
匿名对象:
没有名字的对象/ 没有对象名的对象
格式:
new 构造方法( 所需参数)
用途:
1. 提高开发效率, 隐形眼镜日抛, 一次性筷子
匿名对象当前行使用之后, 如果没有其他引用数据类型的变量保存其地址, 直接销毁
2. 简化代码结构
3. 通过匿名对象直接调用成员方法
4. 使用匿名对象作为方法的参数
2.2 代码演示
package com. qfedu. b. dream;
class Dog {
String name;
public void sleep ( ) {
System. out. println ( "小狗睡觉~~~" ) ;
}
}
public class Demo1 {
public static void main ( String[ ] args) {
Dog dog = new Dog ( ) ;
dog. sleep ( ) ;
System. out. println ( "---------------------" ) ;
new Dog ( ) . sleep ( ) ;
System. out. println ( new Dog ( ) ) ;
System. out. println ( new Dog ( ) ) ;
System. out. println ( "---------------------" ) ;
new Dog ( ) . name = "骚杰" ;
new Dog ( ) ;
System. out. println ( new Dog ( ) . name) ;
System. out. println ( "---------------------" ) ;
Dog dog2 = new Dog ( ) ;
useDog ( dog2) ;
useDog ( new Dog ( ) ) ;
}
public static void useDog ( Dog dog) {
dog. sleep ( ) ;
}
}
2.3 总结
1. 匿名对象是为了提高开发效率, 节约内存使用的, 同时让代码更加贴近于真实操作
2. 匿名对象常用方式
第一个是直接使用匿名对象调用成员方法
第二个是直接使用匿名对象作为方法的参数
3. 匿名对象【禁止】使用成员变量
3. 继承
3.1 生活/游戏中的继承
财产继承
王多鱼
子承父业
样貌继承
你长得真像你父母
家族继承
祖传秘方
游戏
英雄联盟中的所有英雄
血量, 郎亮, 攻击力, 法术强度, 魔抗, 护甲, 攻速....
每一个英雄都会有以上的属性, 但是各自使用的方式, 技能, 模式是不一样的
Pubg
很多建筑都是类似的?
拼图楼, 学区房, 假车库, 烂尾楼, 二层小楼....
楼宇之间有很多相似之处, 都是基于一种模型实现的
PUBG人物
人物物理模型是一样的, 速度, 跳跃高度
3.2 概念总结
继承在开发中是一种抽象的归纳总结思想, 剥离通用的属性, 通用的方法, 简化之后的开发压力. 只需要在继承之后, 满足个性化的实现即可
通过继承可以优化代码, 在JavaWEB开发中, 继承大多数情况下, 都是用来提高方法的复用度
3.3 Java中如何完成继承
关键字
extends
格式
class A extends B {
}
A类是B类的一个子类
B类是A类的唯一父类
【Java是一门单继承语言, 一个类有且只能继承一个父类】
3.4 继承代码演示
package com. qfedu. c_extends;
class Father {
public int height;
private int testPrivate;
public void game ( ) {
System. out. println ( "钓鱼, 象棋" ) ;
}
private void privateMethod ( ) {
System. out. println ( "私有化方法" ) ;
}
}
class Son extends Father {
public int age;
public void study ( ) {
System. out. println ( "子类学习方法!!" ) ;
}
}
public class Demo1 {
public static void main ( String[ ] args) {
Father father = new Father ( ) ;
father. height = 170 ;
father. game ( ) ;
System. out. println ( father. height) ;
System. out. println ( "--------------------" ) ;
Son son = new Son ( ) ;
son. age = 16 ;
son. study ( ) ;
System. out. println ( son. age) ;
son. height = 172 ;
son. game ( ) ;
}
}
3.5 继承总结
1. A类使用extends关键字继承B类
A类是B类的一个子类, B类是A类的唯一父类
2. 继承之后, 子类可以通过继承得到父类中的非私有化成员变量, 和私有化成员方法
3. 继承之后, 子类不可以通过继承得到父类中的私有化成员变量和私有化成员方法
3.6 有其父, 才有其子
package com. qfedu. c_extends;
class Animal {
public String name;
public Animal ( ) {
System. out. println ( "Animal类的无参数构造方法 Constructor" ) ;
}
}
class Dog extends Animal {
public Dog ( ) {
System. out. println ( "Dog类无参数构造方法" ) ;
}
}
public class Demo2 {
public static void main ( String[ ] args) {
Dog dog = new Dog ( ) ;
dog. name = "狗狗" ;
System. out. println ( dog. name) ;
}
}