java 继承 多态 封装_java基础: 封装、继承、多态

封装

一、封装的好处

1、提高安全性

2、提高复用性

3、将复杂的事情简单化

二、Java中的封装体

1、方法安全性:调用者不知道方法的具体实现

2、复用性:方法可以被重复使用

3、简单化:将繁多的代码以一个方法的方式呈现,仅通过调用方法就可以实现功能;代码维护也变得简单类

三、private修饰成员变量

四、构造方法

构建、创造,也叫构造器,用来帮助创建对象的方法,准确的说,构造方法的作用是初始化对象

格式:

修饰符构造方法名(参数列表){//方法体}

public class Student {

public Student(String name, int age) {

this.name = name;

this.age = age;

}

public String name;

private int age;

public void study() {

System.out.println(this.name);

System.out.println("-------------------");

System.out.println(this.age);

}

}

要求:

1、方法名必须与类名相同

2、没有返回值

3、没有返回值类型

注意事项

1、若未提供任何构造方法,系统会给出默认无参构造

2、若已提供任何构造方法,系统不再提供无参构造

3、构造方法可以重载

Java中封装的概念

将一系列相关事物共同的属性和行为提取出来,放到一个类中,隐藏对象的属性和实现细节,仅对外提供公共的访问方式。

隐藏对象数据的实现细节,意味着一个类可以全面的改变存储数据的方式,只要使用同样的方法操作数据,其它对象就不会知道或介意所发生的变化。

封装的关键

==绝对不能让类中的方法直接访问其它类的数据(属性),程序仅通过对象的方法与对象的数据进行交互

继承

一、Java中的继承

通过扩展一个类来建立另外一个类的过程,叫做继承(inheritance)

通俗地说,所谓继承,就是让类与类之间产生父子关系。

所有的类都直接或间接的继承自:

java.lang.Object被继承的类叫做父类(基类、超类)继承的类叫做子类(派生类)

二、格式(extends)

class父类{

//...

}

class子类extends父类{

//...

}

// 调用类

public class Test {

public static void main(String[] args) {

Dog d = new Dog("小白");

d.setName("小黑");

d.output();

}

}

//父类 动物类

public class Animal {

public String name;

public int age;

public Animal(int age) {

this.age = age;

}

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

}

//子类 Dog类

public class Dog extends Animal {

public String name;

public Dog(String name) {

super(10);//调用父类构造 如果不写系统会默认调用

this.name = name;

}

public String getName() {

return name;

}

public void output() {

//super.父类方法 子类调用父类方法

System.out.println("父类的名字是" + super.getName());

//this.父类方法 子类调用子类方法

System.out.println("子类的名字是" + this.getName());

}

}

三、子类继承父类之后有什么效果?

子类拥有了父类的非私有成员(成员变量、成员方法)

父类的私有成员不能被继承

四、继承的优缺点

优点:

1、功能复用

2、便于扩展新功能

3、结构清晰,简化认识

4、易维护性

缺点:

1、打破了封装性

2、高耦合性

五、this和super的区别

1. 查找变量的原则:就近原则

2. 查找变量的顺序:局部变量成员变量父类更高的父类...Object

3. 访问父类变量的方式: super.父类变量名;

4. super:当前对象父类的引用(父类内存空间的标识)

5. 对象初始化顺序:先初始化父类内容,再初始化子类内容

6、this:当前实例化对象

多态

//父类 动物类

public class Animal {

public String name;

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void eat() {

System.out.println("吃饭");

}

}

//子类 Dog类

public class Dog extends Animal {

@Override //重写父类的eat方法

public void eat() {

System.out.println(getName()+"吃骨头");

}

}

//子类 Pig类

public class Pig extends Animal {

@Override

public void eat() {

System.out.println(getName()+"吃面条");

}

}

// 调用类

public class Test {

public static void main(String[] args) {

Dog d = new Dog();

d.setName("小白");

showAnimal(d);

Pig p = new Pig();

p.setName("小花");

showAnimal(p);

}

//传统调用

public static void showAnimal(Dog d) {

d.eat();

}

public static void showAnimal(Pig p) {

p.eat();

}

//多态调用

//多态的使用场景:父类型可以作为形参的数据类型这样可以接受其任意的子类对象

public static void showAnimal(Animal an) {

an.eat();

}

}

一、什么是多态?

多种状态,同一对象在不同情况下表现出不同的状态或行为

二、Java中实现多态的步骤

1、要有继承(或实现)关系

2、要有方法重写

3、父类引用指向子类对象(is a关系)

为什么父类引用可以指向子类对象?

因为二者满足子类、父类的关系,所以任何一个Dog都可以Animal的形式使用

加载类:

创建子类对象时,先加载父类,再加载子类

构造方法:

先执行父类的构造方法,初始化子类对象的父类成员部分然后再初始化子类成员部分

成员方法:

类的成员方法在方法区开辟空间并有一个地址值,该类的每一个对象都会记录方法区中的地址

在类的加载过程中,创建虚拟方法表,记录了子父类方法重写关系的信息。通过父类引用调用方法时,会查找虚拟方发表,看该方法是否被重写,如果表中记录了重写信息,则执行子类的重写方法。

多态的好处和弊端

多态的好处可维护性:

基于继承关系,只需要维护父类代码,提高了代码的复用性,大大降低了维护程序的工作量

为什么要学习多态:

从程序的模块化和复用性来解释

封装:隐藏数据的实现细节,让数据的操作模块化,提高代码复用性

继承:复用方法,从对象的行为这个层面,提高代码的复用性

多态:复用对象,程序运行时同一个对象表现出不同的行为

可扩展性:把不同的子类对象都当作父类看待,屏蔽了不同子类对象间的差异,做出通用的代码,以适应不同的需求,实现了向后兼容

多态的弊端

不能使用子类特有成员

解决办法:

向下转型(前提:必须准确知道该父类引用指向的子类类型)

类型转换

当需要使用子类特有功能时,需要进行类型转换

```

向上转型(自动类型转换)//子类型转换成父类型Animal animal = new Dog();

向下转型(强制类型转换)//父类型转换成子类型Dog dog = (Dog)animal;

注意事项

只能在继承层次内进行转换,否则可能造成异常(ClassCastException)将父类对象转换成子类之前,使用instanceof进行检查

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值