码迷,mamicode.com
首页 > 编程语言 > 详细

Java类和多态

时间:2018-11-05 00:37:10      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:static   --   屏幕   代码冗余   相同   主板   system   out   ring   

*********************第八章 复用类和多态******************************

可复用


一.方法


二.复用 类

1.组合

2.继承


*****************************组合 has a******************************

一.什么是组合


是关联的特例


组合: 部分只能属于一个整体

整体有一个部分

人和心脏 汽车和发动机

 

二.how

类A 组合 一个类B的对象

class A {

B b = new B();//组合
}

 

举例1:

学生有一个女朋友

public class Student{

private int sno;
private String name;
private int age;

private Girl girl = new Girl();//组合
}

 


举例2:

笔记本有一个屏幕


14寸屏幕

package com.chapter8.演示组合;

//14寸的屏幕
public class Screen14 {

public void display(){
System.out.println("使用14寸屏幕进行显示");
}
}

 

笔记本

package com.chapter8.演示组合;

//笔记本
public class Notebook {

//组合
//has a 笔记本 有一个屏幕
private Screen14 screen = new Screen14();

public void work(){
System.out.println("主板通电");
System.out.println("硬盘转");
System.out.println("cpu从硬盘中读取操作系统文件");
System.out.println("风扇转");

screen.display();//复用了屏幕类的代码 不需要从新再写一遍屏幕的显示逻辑了
}

public static void main(String[] args) {
Notebook notebook = new Notebook();

notebook.work();
}


}

 

三.why 为什么用组合


复用类的代码


当多个类中 有相同的代码时 使用方法来复用代码 就不管用了

1.需要把多个类中(战士、法师、弓箭中)相同的代码 抽取出来 抽到一个类中(Knife 刀)

2.定义的战士的时候 让战士组合一把刀 复用刀的代码

//战士 has a 刀
class 战士 {

private Knife knife = new Knife();//组合


public void attack(){

knife.kan();
}
}

其他类也是一样


class 弓箭手 {

private Knife knife = new Knife();//组合


public void attack(){

knife.kan();
}
}

 


*****************************局部变量能使用 访问控制权限修饰符 修饰吗??***************************

不能.因为局部变量的作用域由程序员定义的位置决定,不能使用 访问权限修饰符修饰

 

一.修饰类的


二.修饰类的成员的(1.属性 2.方法)

 

 

***********************************依赖关系*****************************************

把一个对象 定义成局部变量 并且调用该对象的方法 这时候会产生依赖

例如


package com.chapter8.演示组合;


依赖
// 笔记本的工作---------->屏幕的显示
public class Notebook {


public void work(){

Screen14 screen = new Screen14();//依赖

System.out.println("主板通电");
System.out.println("硬盘转");
System.out.println("cpu从硬盘中读取操作系统文件");
System.out.println("风扇转");

screen.display();//复用了屏幕类的代码 不需要从新再写一遍屏幕的显示逻辑了
}

public static void main(String[] args) {
Notebook notebook = new Notebook();

notebook.work();
}


}


**********************************继承******************************

复用类的第二种方式: 继承


一.why 什么时候想到使用继承


当多个类中有相同的方法(吃饭、睡觉、打豆豆),为了防止多个类中相同的方法或属性

出现多次,可以把多个类中相同的属性和方法 抽取到一个类中 Person,其他类继承这个Person

即可,解决了代码冗余问题


二.what 什么是继承 is a


准确的应该翻译成扩展 ,可以理解成复制

学生类继承人这个类,相当于学生类 在人这个类的基础上扩展代码(加代码)

 

Person类可以看成代码的0.1版本

子类 Student 可以看成 0.2版 在0.1的基础上加代码

 

子类 is a 父类


学生 is a Person

老师 is a Person


public class Person {
public void eat() {
System.out.println("吃饭");
}

public void sleep() {
System.out.println("睡觉");
}

public void beatBeanBean() {
System.out.println("打豆豆");
}
}

 

public class Student extends Person{


public void study(){
//我在学习
}
}

相当于

public class Student{
public void eat() {
System.out.println("吃饭");
}

public void sleep() {
System.out.println("睡觉");
}

public void beatBeanBean() {
System.out.println("打豆豆");
}

public void study(){
//我在学习
}

}


三.how 如何继承

使用extends 关键字


public class Student extends Person{


public void study(){
//我在学习
}

public static void main(String[] args) {
Student s = new Student();

s.eat();//子类中没有定义eat() 但是可以调用 说明从父类中继承了eat()方法
}
}


Person 叫做父类,也叫做 基类、超类


Student 叫做子类, 也叫做派生类、衍生类

 

**不要重造轮子,父类的代码写过一遍,就不要再从新写了, 直接继承就可以了...

 


***********************************组合和继承如何选用?*******************************************


多用组合,少用继承。 除非有明确的is a 关系再使用继承

 

学生 is a Person


为什么要多用组合,少用继承?


因为组合比继承更加灵活

 

*********************继承中的访问控制权限修饰符******************************


1.private

private修饰的属性和方法 不能被继承


2. protected 和public 修饰的属性和方法 可以被继承

 

3. default

包权限


本包中的子类 可以继承,其他包中的子类不能继承

 

举例: 爸爸的宝马车

 

父亲

//父类
public class Father {

//has a 组合
BMW bmw = new BMW();


}


孩子


public class Son extends Father{

public void goToPlay(){
bmw.drive();
}

public static void main(String[] args) {
Son son = new Son();
son.goToPlay();
}
}

 

Java类和多态

标签:static   --   屏幕   代码冗余   相同   主板   system   out   ring   

原文地址:https://www.cnblogs.com/MrTanJunCai/p/9906777.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!