Java面向对象(二)学习笔记
程序员文章站
2024-03-12 22:55:20
...
前言:
封装、继承、多态之后抽象以及接口的学习需要特别重视!!!
补:
String 方法是在堆之中
面向对象思想:
抽象类,没有业务意义,比如宠物吃东西, 我们借用abstract 设计抽象类,此时编译器会进行提示
Note:
构造函数不能抽象,抽象类中可以有抽象方法供子类调用
接口:
JAVA借用接口实现多继承,这一点与C++非常不一样。侧重点在行为
学习样例:
开发打印机---面向接口编程
需求:
墨盒;彩色,黑白
纸张:A4,B5
黑盒和纸张都不是打印机厂商提供的,打印机厂商要兼容市场上的墨盒、纸张
墨盒接口:得到颜色,
实现接口:1.彩色 2.黑白
纸张接口 :得到纸张
纸张类型:1.A4 2.B5
行为是打印:
输出:使用黑白墨盒在A4纸张上打印。
部分代码如下
接口
package com.ydl.ch04;
public interface Paper {
public String getSize() ;
}
实现接口
package com.ydl.ch04;
public class A4Paper implements Paper {
String paper="A4纸张";
@Override
public String getSize() {
this.paper="A4纸张";
//System.out.println("使用"+paper);
return paper;
}
}
打印机类
package com.ydl.ch04;
public class NewPrinter {
public Paper paper;
public Printer pri;
public Paper getPaper() {
return paper;
}
public void setPaper(Paper paper) {
this.paper = paper;
}
public Printer getPri() {
return pri;
}
public void setPri(Printer pri) {
this.pri = pri;
}
public void display(){
System.out.println("使用"+paper.getSize()+"进行"+pri.getInk()+"打印");
}
}
测试类:
package com.ydl.ch04;
public class Test {
public static void main(String[] args) {
/*Paper pa1=new A4Paper();
Printer pr1=new ColorPrint();
System.out.println(pa1.getSize()+pr1.getInk());
Paper pa2=new B5Paper();
Printer pr2=new InkPrint();
System.out.println(pa2.getSize()+pr2.getInk());*/
A4Paper a4=new A4Paper();
ColorPrint c4=new ColorPrint();
NewPrinter n4=new NewPrinter();
n4.setPaper(a4);
n4.setPri(c4);
n4.display();
B5Paper b5=new B5Paper();
InkPrint c5=new InkPrint();
NewPrinter n5=new NewPrinter();
n5.setPaper(b5);
n5.setPri(c5);
n5.display();
n5.setPaper(a4);
n5.setPri(c5);
n5.display();
n5.setPaper(b5);
n5.setPri(c4);
n5.display();
}
}
Notes:
与C++不同,JAVA不用直接的多继承,而采用接口,实现多继承
静态:
静态方法的调用:尽量使用类名来调用,免得与普通方法弄混,当然JAVA编译器会帮我们进行优化
静态代码块:
不需要调用就会加载
下面附上小马哥笔记
static成员在JVM中的存储
如何理解接口是一种能力
- 可以被多继承
- 设计和实现完全分离
- 更自然的使用多态
- 更容易搭建程序框架
- 更容易更换实现:比如插座,提供充电的功能,比如市场上所有插座的都是2-3个插口