Java 语言的特性
Java 是一款面向对象的语言,Java 语言的最重要三大特征是:封装、继承、多态。在学习Java语言是对三大特性的学习尤为重要,以下是在学习过程中,所学习了解到的相关内容。
下面对三大特征进行进一步说明:
封装
封装指的是把一个对象属性私有化,同时提供一些可以给外界访问该属性的方法。比如写一个类时会用 private 修饰属性,用 public 修饰的 set 和 get 方法提供外界访问和修改属性的方法。
public class Example{
private int i;
**加粗样式**public void set( int x ){
i = x;
}
public int get(){
return this.i;
}
}
Java 中通过访问修饰符来控制类中每个成员和方法的访问权限,访问权限修饰符主要有三种public、protected、private,如果不写访问权限修饰符,则表示它是包访问权限,有些地方也会称为 friendly。
- public:对所有类可见,类、接口、变量、方法都可以使用。
- protected:对同一包内的类和所有子类可见,变量、方法可以使用。
- private:在同一类内可见,变量、方法可以使用。
- 包访问权限(什么也不写):同一包内可见,类、接口、变量、方法都可以使用。
以上四种权限从最大权限到最小权限分别是:
public > protected > 包访问权限 > private
修饰符 | 类内部 | 同包 | 子类 | 任何地方 |
---|---|---|---|---|
public | Yes | Yes | Yes | Yes |
protected | Yes | Yes | Yes | |
包访问权限 | Yes | Yes | ||
private | Yes |
继承
继承是指使用已经存在的类作为基础建立新的类。
- 在继承的类中,子类拥有父类的所有属性和方法,但是父类中的私有属性和方法子类无法访问
- 此外子类可以拥有自己的属性和方法。
多态
多态是指同一个行为具有多个不同表现形式或形态的能力。
- Java 中有两种多态的实现形式:继承和接口。
- 最常见的一种多态就是 List 集合了:
List list=new ArrayList()
上面的代码就是多态的一种实现形式。从代码上来看,就是父类的对象变量调用了子类或者调用了接口实现类。
Java 中多态的实现需要具备三个必要条件:继承、重写以及向上转型。
- 继承:多态中需要存在有继承关系的父类和子类,或是类与接口之间的实现关系。
- 重写:子类对父类中的某些方法进行重写,当调用这些方法时就会调用子类中的方法。
- 向上转型:多态中需要将子类的引用赋给父类对象。
多态的作用是消除类型间的耦合关系,多态不仅简化了代码,当要增加新的功能时,只需要新建一个类继承父类即可,不用修改其他类的代码,增强代码的扩展能力。
下面给出一个典型的例子,相信大家在java学习中经常遇到:
首先定义所有动物的公共父类 Animal:
public class Animal {
private String message;
public Animal(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void talk(){
System.out.println("动物的叫声");
}
}
创建继承了 Animal 类的 Dog 类,该类调用父类构造方法,重写 talk 方法。
public class Dog extends Animal {
public Dog(String talk) {
super(talk);
}
@Override
public void talk() {
System.out.println("狗的叫声:"+super.getMessage());
}
}
创建继承了 Animal 类的 Cat 类,该类调用父类构造方法,重写 talk 方法。
public class Cat extends Animal {
public Cat(String message) {
super(message);
}
@Override
public void talk() {
System.out.println("猫的叫声:"+super.getMessage());
}
}
在 Main 方法中分别使用多态的调用方式生成 Dog 和 Cat 对象。
public class HelloWorld{
public static void main(String[] args) {
Animal dog=new Dog("汪");
Animal cat=new Cat("喵");
dog.talk();
cat.talk();
}
}