1 面向对象编程三大特征
1.1 封装
细节影藏,系统安全性,整体
1.2 继承
1.3 多态
2 继承
2.1 需求
创建图形化窗口,类似于普通window窗口
package com.ffyc.entity;
import javax.swing.*;
/*
extends:继承
Mywindow继承JFrame,
将Mywindow my = new Mywindow();
改为JFrame my = new Mywindow();
*/
public class Mywindow extends JFrame{
public Mywindow(){
this.setBounds(100,100,400,300);
this.setTitle("演示继承");
this.setVisible(true);
}
public static void main(String[] args){
Mywindow my = new Mywindow();
}
}
2.2 什么情况下使用继承
IS A
A is a B;
B---父类(基类)
A---子类
2.3 访问控制符
protect -- 继承(包);
private < 默认(不写):本包 < protected(继承) < public
Car
package com.ffyc.entity;
public class Car {
public void run(){
System.out.println("能跑的车");
}
public void guess(){
System.out.println("你猜……");
}
}
FlyCar
package com.ffyc.entity;
public class FlyCar extends Car{
}
Test
package com.ffyc.test;
import com.ffyc.entity.FlyCar;
public class TextFlyCar {
public static void main(String[] args){
FlyCar fc = new FlyCar();
fc.run();
fc.guess();
}
}
测试
Animal
package com.ffyc.entity;
public class Animal {
public void move(){
System.out.println("动物能运动");
}
}
Snake
package com.ffyc.entity;
public class Snake extends Animal{
}
TestAnimal
package com.ffyc.test;
import com.ffyc.entity.*;
public class TestAnimal extends Animal {
public static void main(String[] args){
Animal a = new Animal();
a.move();
Fish f = new Fish();
f.move();
Bird b = new Bird();
b.move();
Animal s = new Snake();//可用父类Animal代替Snake
s.move();
System.out.println(s instanceof Animal);//“instance”:用来判定是否正确
}
}
2.5 方法重写
2.5.1 方法重载
在一个类中,方法名称完全一样,参数的类型或者个数不一样
2.5.2 方法重写(覆盖)
继承关系
package com.ffyc.entity;
public class Bird extends Animal {
@Override//覆盖,重写,输入m会弹出
public void move(){
System.out.println("早起的鸟儿有虫吃");
}
}
3 多态(统一一种类型)
具有继承关系
1 父类的引用指向子类对象 Animal a = new Dog() 保证类型一致
2 子类对父类的方法进行重写
3 在不同时刻调用相同的方法,结果不同
4 动物模型问题
4.1 Animal中的方法
实际上没有多大作用,被子类方法重写
设计的目的,如果子类不重写,提供一个规范
4.2 抽象类
特点
*类,不能不被实例化 AbstractA a = new 子类()
*abstract
package com.ffyc.entity;
public abstract class ACaculator {
public abstract double add(double a, double b);
public abstract double minus(double a, double b);
public abstract double mul(double a, double b);
public abstract double divide(double a, double b);
public abstract int pow(int a ,int b);
}
5 接口
java的继承----》单继承
多继承---》接口
abstract class ---> interface
extends ---> implements