面向对象(下)日期类
概念题
1.面向对象的三大特性是什么?请分别梳理它们的知识点。
封装、继承、多态
封装:
1、提高程序的安全性、保护数据
2、隐藏代码的实现细节
3、统一接口
4、系统的可维护性增加了
get 获得这个数据 set 给这个数据设置值 ————————快捷键:alt + insert
继承:
public class A extends B
重写:需要有继承关系,子类重写父类的方法!
重写只和非静态方法有关!
方法的调用只和定义的类型有关!
子类的方法和父类必须要一致;方法体不同。
1、方法名必须相同
2、参数列表必须相同
3、修饰符:范围可以扩大,但是不能缩小
public > protected > default > private
4、抛出的异常:范围可以被缩小,但不能扩大:ClassNotFoundException(小) -->Exception(大)
为什么需要重写?
1、父类的功能子类不一定需要,或者不一定满足!
Alt + Insert : override
多态:即统一方法可以根据发送对象的不同而采用多种不同的行为方式。(多态是方法的多态,没有属性)
多态注意事项:
1、多态是方法的多态,属性没有多态
2、父类和子类,有联系 ——>类型转换异常! ClassCastException!
3、存在条件: 继承关系,方法需重写,父类引用指向子类对象!father f1 = new Son();
- 回顾并梳理this,super,static.final,abstract,interface关键字和instanceof运算符
super注意点:
1、super调用父类的构造方法,必须放在构造方法的第一个
2、super必须只能出现在子类的方法或构造方法中
3、super和this不能同时调用构造方法
VS this:
代表的对象不同:
this:本身调用的这个对象
super:代表父类对象的应用
前提:
this:没有继承也可以使用
super:只有在继承条件下才可以使用
构造方法:
this():本类的构造
super():父类的构造
abstract 抽象类:本质上还是是类 extends: 单继承
抽象方法,只有方法名字,没有方法的实现!
抽象类的所有方法,继承了它的子类,都必须要实现他的方法---除非子类也是抽象的,那就让子子类去重写
1、不能new抽象类,只能靠子类去实现它
2、抽象类中可以写普通方法
3、抽象方法必须在抽象类中
interface 定义的关键字 , 接口都需要有实现类
1、接口中的所有定义的方法都是抽象的 public abstract
2、一个类可以实现接口 implements 接口
3、实现了接口的类,就需要重写接口中的方法
4、利用接口实现多继承
static 方法,属于类,它不属于实例
final 常量;如果一个类被final定义了,那么这个类就无法作为父类被继承!!
private 方法,属性私有
- 内部类有哪几种形式,它们的访问顺序是怎样的?
1. 成员内部类
private int id = 40;
public void out(){
System.out.println("这是外部类的方法");
}
public class Inner{
public void in(){
System.out.println("这是内部类的方法");
}
//获得外部类的私有属性
public void getID(){
System.out.println(id);
}
----------------------------------------------------------
Outer outer = new Outer();
//通过这个外部类实例化内部类
Outer.Inner inner = outer.new Inner();
inner.getID();
2. 静态内部类
public static class Inner{
public void in(){
System.out.println("这是内部类的方法");
}
3. 局部内部类
public void method(){
class Inner{
public void in(){
}
}
}
4. 匿名内部类
//没有名字初始化类,不用将实例保存到变量中
new Apple().eat();
}
}
class Apple{
public void eat(){
System.out.println("1");
}
}
- Java为什么要引入基本数据类型的包装类?你如何理解自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)功能?
java是面向对象的语言,而八大基本类型不是类,而是关键字,因此要针对性地对它们做出基本数据类型的包装类。基本类型能做的事情,包装类也能做。 但包装类能做的,基本类型不一定能做,比如要赋一个 null 值
自动装箱(Autoboxing)和自动拆箱 (AutoUnboxing):
自动装箱可以把一个基本类型变量直接赋给对应的包装类变量;
自动拆箱则直接把包装类对象直接赋给一个对应的基本类型变量。
//直接把一个基本类型变量赋给Integer变量
Integer x = 5;
//直接把一个boolean变量赋给一个Object对象
Object y = true;
//直接把一个Integer对象赋给int 类型变量
int z = x;
自动装箱 ----- 基本类型的值 → 包装类的实例
自动拆箱 ----- 基本类型的值 ← 包装类的实例
编程题
-
抽象类与抽象方法
定义一个(形状抽象类) shape 抽象类,包含一个颜色属性
String color
、计算周长calPerimeter()
的方法和返回形状getType()
的方法
定义一个三角形类Triangle
,并重写Shape类的计算周长calPerimeter()
的方法和返回形状getType()
的方法
定义一个圆形类Circle
,并重写Shape类的计算周长calPerimeter()
的方法和返回形状getType()
的方法
定义一个Main类,并测试
Shape s1 = new Triangle("黑色", 3, 4, 5);
Shape s2 = new Circle("黄色", 3);
System.out.println(s1.getType());
System.out.