一、面向对象的三大特性
1、封装性
封装性的设计思想,即把该隐藏的隐藏起来,该暴露的暴露出来,以此实现程序设计的高内聚(类的内部数据操作细节自己完成,不允许外部干涉)、低耦合(仅对外暴露少量的方法用于使用)。
java中通过将数据声明为私有的(private),在提供公共的(public)方法:get()和set()实现对该属性的操作。
java中使用权限修饰符来限定对该类成员的访问权限。
修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
---|---|---|---|---|
private | yes | |||
(缺省) | yes | yes | ||
protected | yes | yes | yes | |
public | yes | yes | yes | yes |
注:对于class的权限修饰只可以使用public和default(缺省)。
2、继承性
继承是面向对象最显著的一个特性。 继承是从已有的类中派生出新的类, 新的类能吸收已有类的数据属性和行为,并能扩展新的能力。在JAVA中, 被继承的类叫父类(parent class)或超类(superclass), 继承父类的类叫子类(subclass)或派生类(derivedclass)。 因此, 子类是父类的一个专门用途的版本, 它继承了父类中定义的所有实例变量和方法, 并且增加了独特的元素 。
java中只支持单继承和多层继承,不允许多重继承。即一个子类只能由一个直接父类,一个父类可以派生出多个子类。子类不能直接访问父类中私有(private)的成员变量和方法。
继承可以提高代码的重用性。
注:子类是否能继承父类的私有方法?
从语言角度上说:JDK官方文档明确说明子类不能继承父类的私有方法;
但从内存角度来说,jvm在实例化子类对象之前,会现在内存中创建一个父类对象,然后在父类对象外部放上了子类独有的属性,两者合起来形成一个子对象。所以子类确实拥有父类的所有属性和方法,但是父类中的私有方法子类无法访问。
3、多态性
多态性是面向对象中最重要的概念,在java中体现为:父类的引用指向子类的对象,可以直接应用在抽象类和接口上。
java的引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。可以简称为:编译时,看左边;运行时,看右边。
如果编译时类型和运行时类型不一致,就出现了对象的多态性。同时,一个引用类型变量如果声明为父类的类型,但实际引用的是子类的对象,那么该变量就不能在访问子类中添加的属性和方法。
多态的小结:①作用:提高了代码的通用性,常称作接口重用②前提:存在继承或者实现关系,有方法的重写③成员方法:编译时:要查看引用变量所声明的类中是否有多调用的方法;运行时:调用实际new的对象所属的类总的重写方法④成员变量:不具备多态性,只看引用变量所声明的类。
二、类的成员
java类的成员
class Person{
//属性,或者成员变量
String name;
boolean isMarried;
//构造器
public Person(){}
public Person(String name, boolean isMarried){
this.name = name;
this.isMarried = isMarried;
}
//方法,或者函数
public void walk(){
System.out.println("人走路...");
}
public String display(){
return "名字是:"+name+",Married:"+isMarried;
}
//代码块
{
name = "zhangsan";
isMarried = true;
}
//内部类
class pet{
String name;
float weight;
}
}
1、属性
语法格式:修饰符 数据类型 属性名 =