什么是面向编程?
我们在解决问题中,注重的是解决问题的每一个步骤和过程。
什么是面向对象?
注重的是在问题中,涉及到哪些对象,以及对象之间有哪些关系。
什么是对象?
万事万物皆对象,对象是由静态的“属性”和动态的“方法”来组成的。
什么是类?
类:一组具有相同属性和行为的对象的抽象。
什么是消息?
消息:对象之间的通信和响应、外界发给对象的一个请求。
JAVA的三大特性:封装、继承、多态
面向对象封装的体现:
存在一个边界,边界之内的细节隐藏起来,只留下对外的接口,(如,笔记本,手机,饮水机)
为什么使用封装:(1)易用,简单。(2)安全(3)易维护
继承:允许后代直接用先辈的所有属性和行为。
为什么使用继承:更好的实现了代码的重用
多态:不同的对象,接收到相同的消息,产生的响应不同。
多态的体现:重写、重载等。
构造函数:
构造函数,是在对象实例化时自动被系统调用,该函数名必须是独一无二的。对于一个类来说,是将类名作为函数名。
构造函数不需要程序员去定义返回值,他是系统自动决定的,void也不行。
Static静态:静态代码块是在加载类的时候自动被执行,早于构造函数。静态的方法,面向的是整个类,不是某个对象,所有没有this,并且只能使用类名来调用,不能使用实例化对象去调用。
Final修饰的类不能被继承,Final修饰的变量不能被修改(也就是常量)。Final修饰的方法【不变的,固定的】
为什么需要去使用抽象类?
在现实生活中,有些类我们明明知道是有某些方法的,但是具体这些方法是怎么去做的好像又无法说清楚。比如手机、电报、固定电话等等都是通讯工具,而通讯工具就应该具有向外发送消息的方法,但是却无法说明具体怎么发,而手机、电报等,我们又可以说清楚它们是怎么发送消息的。
由于抽象类中包含有未实现的方法,所以抽象类是无法去实例化对象(new),那么它的作用是什么呢,它可以对它的后代进行规划和约束,后代必须去按照它的要求去实现,但具体怎么实现由后代去决定。
匿名内部类:
为什么要使用匿名内部类?
先看看如果不使用匿名内部类的情形:
(1) 定义接口 Shape(如果已经有则跳过)
public interface Shape {
public String getName();
public double area();
public double perimeter();
}
(2)实现接口实现类 Square
public class Square implements Shape{//接口Shape形状被方形Square实现l
public double d;
public Square(double d) {
this.d = d;
}
@Override
public String getName() {
return "正方形";
(3)定义Square类对象并使用
public class Test {
public static void main(String[] args) {
Square square = new Square(5);
Shape shape = square;
print(shape);
}
public static void print(Shape shape){
System.out.println(shape.getName()+"的周长是"+shape.perimeter()+"\n的面积是"+shape.area());
}
那么如果使用匿名内部类呢?
(1) 定义接口(与上一种情形一样)
(2) 定义匿名内部类,并实现接口(实际上就是将上一种情形的第2、3步给合并了)。
匿名内部类显然简化了流程,但是也使得使用者理解更困难了,代码的层次不是太清晰。
静态的方法,只能访问静态的成员。