目录
在学习Java语言之前,可能都有接触过C语言。C语言是面向过程的一门语言,面向过程的语言讲究的是因果关系,由一个因果关系构成一个模块,再由此模块与另一个因果关系构成一个模块,所以由C语言写出来的程序的耦合度很高,扩展性很差。而Java继承了C语言的优点,同时也改进了C语言的缺点,Java是一门面向对象的语言,将现实世界中的实体分成一个个独立的个体(现实中的个体都是独立的,具有独立特),独立性好,耦合度低,扩展性强。这些优点是由于Java语言的三大特性。
一、封装性
(1)Java语言中的每个对象都相当于现实世界中的一个独立的个体,而要想使这些对线成为一个独立的个体就要对他进行封装。只有封装之后才能让它成为一个真正的对象,具有独立体性。
(2)封装之后的代码可以被重复使用,他的适应能力很好,可以用在各种场合。
(3)封装之后对于事物本身,提高了安全性。
(4)封装步骤
- 将所有的属性私有化,即用private关键字进行修饰,被private关键字修饰的只能在本类中访问
- 对外提供一个简单地操作入口,即通过这个入口可以使外部程序可以对此程序进行访问(读、写操作)
(5)以下几点需要注意
- getter and setter方法是没有static关键字的
- 他们通过引用.的方式来调用的
- get方法的语法:get+属性名(属性名的首字母要写)
- set方法的语法:et+属性名(属性名的首字母要大写)
(6)案例展示
public class User {
//以下三个属性用private关键字进行修饰,表示这个对象北风装成了一个独立的个体
private String name;
private String sex;
private int age;
//下面的getter and setter方法是对外部程序访问本程序提供的一个接口
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User() {
}
public User(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
}
public class TestMain {
public static void main(String[] args) {
User user=new User();
//因为user对象通过private关键字进行了封装,所以只能通过get()和set()进行访问
//以下是通过set进行赋值,即设置数据
user.setName("张三");
user.setSex("男");
user.setAge(18);
//以下是通过get进行读取数据
System.out.println(user.getName());
System.out.println(user.getSex());
System.out.println(user.getAge());
}
}
二、继承性
1、因为Java语言的封装特性使Java对象成为一个独立的个体,这个独立的个体(在此称为对象A),有它自己的方法和属性,但如果另一个对象(再次称为对象B)也有和此对象相同的某些方法,则为了简化代码的书写,可以让B继承A。
2、继承的作用:代码复用,但继承最主要的作用还是因为有了继承才有了方法的覆盖和多态语法机制
3、语法格式:【修饰符列表】class 类名 extends 父类名
4、Java语言只支持单继承,就像一个孩子只有一个亲生父亲一样,但c++支持多继承
5、如果B继承A,则A、B的别称如下
A:父类、基类、超类、superclass
B:子类、派生类、subclass
6、构造方法不会被继承
7、Java语言虽然只支持单继承,但可以间接继承多个其他类,就像一个孩子身上由父亲的基因,父亲身上由爷爷的基因,爷爷身上由太爷爷的基因,所以这个孩子除了继承父亲的基因,还继承爷爷、太爷爷......的基因。
8、如果一个类没有继承任何类,那么他就默认继承java.lang.object这个类
9、案例展示
public class Anaimal {
public void move(){
System.out.println("动物会移动");
}
}
public class Bird extends Anaimal{
//用了extends关键字表明Bird继承Animal
}
public class TestMain {
public static void main(String[] args) {
Bird b=new Bird();
b.move();
}
}
输出结果:动物在移动
三、多态
前面有说过,继承最主要的作用是有了继承才能使用方法覆盖和多态语法机制。再说多态之前先说以下转型:
- 向上转型:子类型转成父类型
- 向下转型:父类型转成子类型
1、先来看一下以下的这段代码
public class Anaimal {
public void move(){
System.out.println("动物会移动");
}
}
public class Bird extends Anaimal{
//用了extends关键字表明Bird继承Animal
}
如果是从上往下看的,就会发现这两段代码和上面那段代码是一样的,那为什么只复制了前两段代码而没把第三段代码复制过来,这是因为前面是讲继承,现在在讲多态自然有不一样的地方
public class TestMain {
public static void main(String[] args) {
//在上一段短代码中可以看出,创建完bird对象之后将他赋给了bird类型的引用,
//所谓的多态就是创建完某一对象后(如bird对象),将他赋给他的父类型的引用(即在这个案例中是Animal)
Animal a=new Bird();
a.move();
}
}
最后输出的结果:动物在移动
2、要是想用多态最重要的前提是一定要有继承,使用了多态这也就达到了降低程序耦合度,提高程序的扩展力(就是说父类性的引用指向了子类型的对象),这是软件开发的一个重要目标,在以后开发过程中能使用多态尽量使用多态,因为Java语言的核心就是面向对象编程。尽量不要面向具体编程。