Java是一种面向对象的程序语言,三大特性:封装性,继承性,多态性。
1.封装性
将对象的属性和方法封装起来,不需要让外界知道具体实现的细节。封装可以使数据的安全性得到保证。
(1)属性的封装。Java中类的属性访问权限的默认值不是private,要想隐藏该方法或属性,就可以加private修饰符来限制只能在类的内部进行访问。
(2)方法的封装。对于方法的封装,方法公开的是方法的声明(定义),只要知道参数和返回值就可以调用该方法。隐藏方法的实现会使实现的改变对架构的影响最小化。完全的封装是类的属性全部私有化,并且提供一对方法来访问属性。
class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class User{
public static void main(String[] args) {
Person p1 = new Person();
p1.setAge(10);
p1.setName("zhang");
System.out.println(p1.getAge());
System.out.println(p1.getName());
}
}
Person类中的name和age属性为private,每个属性具有getxxx()和setxxx(),这两个方法为public,User类可以通过setxxx()方法来设置对应的属性。
2.继承性
继承主要指的是类与类之间的关系。Java中的继承使用extends关键字,并且Java中只允许单继承,子类只能继承在父类中可以访问的属性和方法,实际上父类中私有的属性和方法也会被子类继承,只是子类无法访问。
class Animal{
public String name;
private int id;
public void eat(){
System.out.println(name+" 正在吃");
}
public void sleep(){
System.out.println(name+"正在睡");
}
}
class Cat extends Animal{
public void shout(){
System.out.println(name+" 正在叫");
}
}
public class Dog {
public static void main(String[] args) {
Cat c1 = new Cat();
c1.sleep();
}
}
3.多态性
多态是把子类型的对象主观的看作其父类型的对象,那么父类型就可以是很多种类型。编译时类型指被看作的类型,是主观认定的。运行时类型指实际的对象实例的类型,是客观的,不可改变。
动态有以下特性:对象实例确定后不可改变;只能调用编译时类型所定义的方法;运行时会根据运行时类型去调用相应类型中定义的方法。
class Animal{
int age = 10;
public void eat(){
System.out.println(" 动物吃东西");
}
public void shout(){
System.out.println("动物在叫");
}
public static void run(){
System.out.println("动物在奔跑");
}
}
class Cat extends Animal{
String name = "小猫";
public void eat() {
System.out.println("猫在吃东西");
}
public static void run(){
System.out.println("猫在奔跑");
}
public void watchDoor(){
System.out.println("猫在看门");
}
}
public class Dog {
public static void main(String[] args) {
Animal a1 = new Cat();
a1.eat();
a1.shout();
a1.run();
System.out.println(a1.age);
}
}
Cat类继承了Animal类。
Cat类重写了父类的两个方法,其中eat()是非静态的,run()是静态的。
父类数据类型的引用指向子类对象,即Animal a1 = new Cat()。