前言
这一章内容很多 我从中取出三点
目录
1.再谈继承
2.看看接口
3.static内部类&普通内部类
一:再谈继承
1.两种继承
①:普通继承(这里不再说)
举例:你家的青蛙,你给编号为0,1, 2, 3,4; 现在有一个类:青蛙 你想建立一个类表示你家的青蛙,这时候就是普通继承,因为青蛙也要能实例化,你家的青蛙又不全是普通青蛙的属性,多出了一个编号 int 。
重点:父类本身就可以实例化并需要存在,但是你觉得不能完全表达你的意思。
扩展:思考关于Gui编程中,继承窗口组件。
②:抽象继承(主要提到)
举例:形状是一个类,但是每种形状是不需要实例化的,因为实例化了它,没有任何意义。所以它只是一个模板,真正需要的是三角形,四边形,等等。
重点:父类本身不必实例化,父类只需要为子类提供一个填充模板。
扩展:联想list 与 arrayList & linkedList
③:注意
注意:虽然经常提到,但是继承的使用需要谨慎。继承使用的很少!
看法:自己认为的缺点,就是滥用继承,导致代码混乱。结构混乱。
2.代码演示
父类shape
package zero;
public abstract class Shape{
protected int x;
protected int y;
public Shape(int x, int y){
this.x = x;
this.y = y;
}
public abstract void draw();
}
子类 Square
package zero;
public class Square extends Shape{
private int width;
private int height;
public Square(int x, int y, int width, int height) {
super(x, y);
this.width = width;
this.height = height;
}
@Override
public void draw() {
System.out.println("我是四边形,其实我不能画:\n" + "我的x:" + x + " 我的y:" + y
+ "\n我的宽度=" +width + " 我的高度=" + height);
}
}
子类 Line
package zero;
public class Line extends Shape{
private int width;
public Line(int x, int y, int width) {
super(x, y);
this.width = width;
}
@Override
public void draw() {
System.out.println("我是直线,其实我不能画:\n" + "我的x:" + x + " 我的y:" + y
+ "\n我的长度=" +width);
}
}
代码调用
public static void main(String[] args) {
Shape shape = new Square(0, 0, 100, 100);
shape.draw();
System.out.println();
Shape shape1 = new Line(0, 0, 100);
shape1.draw();
}
输出
我是四边形,其实我不能画:
我的x:0 我的y:0
我的宽度=100 我的高度=100
我是直线,其实我不能画:
我的x:0 我的y:0
我的长度=100
Process finished with exit code 0
二:看看接口
区别:自己认为抽象类比较重量级,并且一个类只能继承一个类,接口比较轻量级,可以实现多个接口,接口默认public,抽象类可以有protected
1.实例1
interface
package zero;
public interface TestInterface {
void say(String s);
}
实现接口
package zero;
public class Line implements TestInterface{
@Override
public void say(String s) {
System.out.println(s);
}
}
演示代码
public static void main(String[] args) {
Line line = new Line();
line.say("interface");
}
2.实例2(常用)
interface
package zero;
public interface TestInterface {
void say(String s);
}
实现接口
package zero;
public class Line implements TestInterface{
@Override
public void say(String s) {
System.out.println(s);
}
}
调用接口
package zero;
public class Square{
private TestInterface testInterface;
public Square(TestInterface testInterface){
this.testInterface = testInterface;
}
public void say(){
testInterface.say("测试会不会改变");
}
}
测试代码和输出
public static void main(String[] args) {
Square square = new Square(new Line());
square.say();
}
output:
测试会不会改变 你觉得呢
Process finished with exit code 0
三:static内部类&普通内部类
引用自:https://zhidao.baidu.com/question/149873207.html
1.静态内部类也叫嵌套类,用这个名字给他定义是更加形象的。意思是说内部类和外部类的关系只是层次嵌套关系,所以只是在创建类文件的时候类文件名是如下形式:outer$inner.java,在使用方面完全和两个普通类一样。
2.一般内部类在我看来才是真正的内部类,他们不仅有着嵌套关系,更重要的是内部类可以获得外部类的引用从而实现回调。而且通过创建内部类还可已让java实现真正的多继承!(interface名叫接口,顾名思义,他就是实现接口的,让一个类继承多个接口实现多继承是不合适的)