Java 面向对象大总结
- 前言
- 一、面向对象的三大特性:封装 继承 多态
- 封装
- 继承
- 多态
- 多态的实现方式:
- 二、重载、重写
- 重载:
- 重写:
- 两者都是多态性的体现:
- 三、抽象类、接口
- 抽象类 abstract
- 接口 interface
- 关于抽象类和接口的使用方向:
前言
本文章要求对面向对象概念有一定的认知,因为不会特别细节的去说一个概念问题
一、面向对象的三大特性:封装 继承 多态
封装
将对象的属性和方法相结合,通过方法将对象的属性和实现细节保护起来,实现对象的属性隐藏。(封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。)
通常来说,Java修饰符就起到了封装的作用,或者比如设置XX属性的取值和赋值的方法,用于对这些属性的访问权限进行区分
public class Person {
//封装的表现1
private String name;
private int age;
//封装的表现2://在内部进行业务逻辑的控制,外部只调用即可
public void setAge(int age)
{
if(age<18||age>40)//对年龄进行限制
{
System.out.println("年龄必须在18到40之间!");
this.age=20; //默认年龄
}
else
{
this.age=age;
}
}
}
继承
是子类继承父类的特征和行为,使得子类具有父类相同的行为。
也就是说,继承是代码复用的一种形式,即在具有包含关系的类中,从属类继承主类的全部属性和方法,从而减少了代码冗余,提高了程序运行效率。
继承关键字:
extends :继承
implements:实现
附:类用于继承,接口用来实现
类的继承格式:
class 父类 {
}
class 子类 extends 父类 {
}
e.g:
public class Person{
public String name; //姓名
public int age; //年龄
public String sex; //性别
}
//学生继承了人类,同时具有了,姓名、年龄、性别属性
public class Student extends Person{
private String stuNo; //学号
private String department; //所学专业
}
接口的实现格式:
public interface A {
public void eat();
public void sleep();
}
public interface B {
public void show();
}
public class C implements A,B {
}
附:通过以上2个格式,可以得出:子类只能继承一个父类,一个类可以实现多个接口
多态
父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,使得同一个属性或方法在父类及其各个子类中具有不同的含义
细分:
编译时多态:静态的,主要是指方法的重载
运行时多态:动态的,通过动态绑定来实现强调文本 (多态性的体现 )
多态存在的三个必要条件:
继承
重写
父类引用指向子类对象(e.g:Parent p = new Child();)
多态的实现方式:
重写,接口,抽象类和抽象方法
二、重载、重写
重载:
同一个类中的两个或多个方法可以共享同一个名称,只要它们的参数声明不同
(同名不同参,返回类型可同可不同 e.g:构造器的重载)
重写:
子类中如果创建了一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能
(同名同参同返回类型)
子类中调用父类的被重写方法:Super 关键字
class Dog extends Animal{
public void move(){
super.move(); // 应用super类的方法
}
}
两者都是多态性的体现:
方法重载是一个类的多态性表现,
方法重写是子类与父类的一种多态性表。
三、抽象类、接口
抽象类 abstract
由abstract修饰的类叫抽象类,abstract修饰的方法叫抽象方法;
抽象的类无法进行实例化,因为他不是具体存在的类,现实生活中如描述动物:哺乳类,爬行类等就相当于抽象类
注意:抽象类里面可以有普通的方法,其他子类在继承这个抽象类时可以不继承这个普通方法,但必须实现这个抽象类的的抽象方法
代码例子:
abstract class 类名{
abstract int 方法名(int x,int y);
注意:抽象方法没有方法体
}
抽象类的特点:
(1)抽象类不能被实例化
(2)构造方法 和 static 方法不能是抽象的
(3)父类的抽象方法往往在子类中实现
(4)抽象类可以具有指向子类对象的对象引用
附:抽象类和普通类的区别?
(1)实例化:普通类可以直接实例化;抽象类不能被实例化,因为它是存在于一种概念而非具体。
(2)继承方面:普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法,除非子类也是抽象类。
接口 interface
接口属于百分之百的抽象类,所以接口中的方法必须全部是抽象方法,无方法体,这也就说明了接口只管规定规则,不管规则的具体实现方式
附:抽象类和接口的区别?
抽象类是对本质的抽象,接口是对动作的抽象(抽象类表示的是,这个对象是什么。 接口表示的是,这个对象能做什么)
相同点:抽象类和接口都是不能被实例化的(因为都是被用做于父类用的,一个继承,一个实现)
不同点:
1.构造方法:抽象类可以有构造方法,接口中不能有构造方法
2.成员变量:抽象类中可以有许多成员变量,接口中没有普通成员变量
3.普通方法:抽象类中包含非抽象的普通方法,接口中的所有方法必须是抽象的,不能有非抽象的普通方法
4.访问类型:抽象类中的抽象方法的访问类型可以是public、protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认的类型为public abstract类型
5.静态方法:抽象类中可以包含静态方法,接口中不能包含静态方法
6.静态成员变量:两者都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static类型(默认也是如此)
7.一个类可以实现多个接口,但只能继承一个抽象类
附一篇关于接口很详细的描述:
JAVA基础——接口(全网最详细教程) 作者:刘扬俊
链接:
关于抽象类和接口的使用方向:
当你关注一个事物的本质的时候用抽象类;一般模块方法设计模式用的多,体现重用性
当你关注一个操作的时候用接口;一般系统架构的模块之间的互相通信
1