面向对象编程(OOP)是软件开发的一种新方法,使用这种方法开发的软件具有易维护、可重用和可扩展性等特性。【特征:封装、继承、多态(抽象)】
面向对象基本概念:(面向对象的设计就是一个抽象的过程)
1、对象:对象就是用来描述客观事物的一个实体。用面向对象的方法解决问题,需要对现实世界中的对象进行分析与归纳,找出哪些对象与解决问题的关联。
2、类:类是具有相同的属性和方法的一组对象集合、是面向对象系统中最重要的概念。类定义了对象将会拥有一些特征(属性)和行为(方法)。类与对象的关系就如同模具和用整个模具制作出的物品之间的关系。一个类给出了他的全部对象的的一个统一的定义,而他的每个对象则都是符合这种定义的一个实体。因此类和对象的关系就是抽象和具体的关系。类是多个对象进行综合的抽象的结果,是实体对象的概念模型,而一个对象是一个类的实例。
面向对象的优点:
1).与人类的思维习惯一致:面向对象的思维方式是从人类考虑问题的角度出发,把人类解决问题的思维过程转变为程序能够理解的过程、面向对象程序设计使用"类"来模拟现实世界中的抽象概念,用"对象"来模拟现实世界的实体从而用计算机解决现实问题
2)信息隐藏,提高了程序的可维护性和安全性:封装实现了模块化和信息隐藏,即将类的属性和行为封装在类中,这保证了对他们的修改不会影响到其他对象,利于维护。
同时,封装使的在对象外部不能随意访问对象的属性和方法,避免了外部错误对它影响,提高了安全性.
3)提高了程序的可重用性:一个类可以创建多个对象实例,体现了重用性。
类的定义:
1)发现类,类定义了对象将会拥有的特征(属性)和行为(方法)。
2)发现类的属性,对象拥有的静态特征在类中表示时称为类的属性。
3)发现类的方法,对象执行操作称为类的方法
例:(网络上搜索)
public class Test1 {
public static void main(String[] args) {
//p是引用对象,持有了对于Person对象的地址值的引用
//此时的p,含有属性,但都是默认值
Person p = new Person();
//设置属性值
p.name="lisi";
p.age=20;
//调用方法
p.eat();
p.sleep();
}
}
class Person{
//属性--成员变量
String name;
int age;
//行为--方法
void eat(){
System.out.println("aaa");
}
void sleep(){
System.out.println("bbb");
}
}
类中成员主要包含两个部分:成员变量和成员方法
成员变量:类中的属性,即直接在类中定义的变量称为成员变量;定义在方法的外部。成员变量的作用域在整个类内部都是可见的,所有的成员变量都可以使用它,如果访问权限允许,还可以在类的外部使用成员变量。如果在类的定义中没有给成员变量赋值,Java会给一个默认值,基本数据类型的值为0;引用数据类型值为null。(成员变量可以在声明时赋初始值!)
成员方法:
1、带参数的方法
在实际应用中经常使用带参数或有返回值的方法(每个人的工作目标都不一样,所以在Person类中定义不同的方法)
2、方法调用:
静态方法调用静态方法:用静态方法时通过(类名.方法名)的方法进行调用,当调用方法和被调用的方法在同一类中时,类名可省略,直接通过方法名进行调用,也可以通过对象进行调用;
静态方法调用非静态方法:静态方法调用非静态方法时,均需要通过对象进行调用。
方法重载:
方法重载是指在同一个类中,定义了多个同名方法,但同名方法的参数类型或参数个数不同就是方法重载。
特点:
1)在同一个类中。
2)方法名相同
3)参数个数或者类型不同
4)方法的返回值不能作为判断方法是否构成重载的依据。
例:
public class OverloadExample {
public static void method() {
// doSomething
}
public static void method(String name) {
// doSomething
}
public static void method(Integer id) {
// doSomething
}
public static void method(Integer id, String name) {
// doSomething
}
}
方法重写:
方法重写(Override)是一种语言特性,它是多态的具体表现,它允许子类重新定义父类中已有的方法,且子类中的方法名和参数类型及个数都必须与父类保持一致,这就是方法重写。
注意事项:
1、子类方法的权限控制符不能变小,也就是如果父类方法的权限控制符是 protected,那么子类的方法权限控制符只能是 protected 或 public;
2、子类方法返回的类型只能变小,也就是说如果父类方法返回的是 Number 类型,那么子类方法只能返回 Number 类型或 Number 类的子类 Long 类型,而不能返回 Number 类型的父类类型 Object;
3、子类抛出异常的类型只能变小;
4、子类方法名必须和父类方法名保持一致;
5、子类方法的参数类型和个数必须和父类保持一致。
例:(参考网络)
/**
* 父类中有一个 method 方法
*/
class Father {
public void method(String name) {
System.out.println("Father:" + name);
}
}
/**
* 子类中重写了父类的 method 方法
*/
class Son extends Father {
@Override
public void method(String name) {
// 子类中重新定义了打印的行为,不再是 Father:XXX,而是 Son:XXX
System.out.println("Son:" + name);
}
}
方法重写与方法重载的异同:
方法重写(Override)和方法重载(Overload)都是面向对象编程中,多态特性的不同体现,方法重写描述的是父类和子类的方法关系,而方法重载描述的是同一个类中多个同名方法的方法关系。除此之外方法重写和方法重载还有:Override 关键字、参数类型和参数个数、返回类型、抛出异常和权限控制符等不同点。
其他:
1、局部变量
局部变量就是定义在方法中的变量。work()方法中的变量age就是局部变量,虽然成员变量和局部变量age名称一样,但表示的不是一个变量。局部变量在使用前需要赋值;否则可能编译出错。局部变量和成员变量可以同名,并一起使用,局部变量具有更高的优先级。作用域仅限于定义它的方法,在该方法外无法访问该局部变量。
2、数据类型
在java中变量的数据类型分为两种:基本数据类型、引用数据类型
java中引用数据类型包括三种:类、数组、接口
构造方法
Java中,当类创建一个对象时会自动调用该类的构造方法,构造方法分为默认构造方法和带参数的构造方法
1.构造方法的定义
构造方法的主要作用是进行一些数据的初始化
定义构造方法的语法格式如下。
1).构造方法没有返回值
2).默认构造方法没有参数,因此参数列表可选
3).构造方法的方法名与类名相同
2.构造方法重载
构造方法也可以重载,即在同一个类中可以定义多个重载的构造方法。
标签:Java,变量,构造方法,对象,子类,面向对象,方法,定义 From: https://www.cnblogs.com/yyyuy/p/17391917.html