随着昨天的学习我们已经掌握了java中类的继承,下面我们来看看java的三大特性的其他两个,封装和多态!
目录
- 封装
- 1.Java 访问权限修饰符
- 2.封装问题引例
- 3.类的封装实例
- 二:继承
- 覆写
- 多态
*多态的基本概念
*方法的多态性
1.Java 访问权限修饰符
在讲解J面向对象的三大特性之前,有必要介绍一下Java 中访问权限修饰符的知识。在java中有四种访问权限修饰符:公有(public)、私有(private)、保护(protected)、默认(default)
2.封装问题引例
在前面我们给出了封装的本质,但读者来说,这个概念可能还是比较抽象。我们眼通过现象看本质,现在本质给出了,如果还不能理解的话,其实是我们没有落实透过现象这个流程。下面我们通过一个实例来说明。
假设我们把对象的属性暴露出来,外界可以任意接触她,甚至改变它,读者可以线看下面的程序,看看会产生什么问题。
public class TestCat{
public static void main(String[] args){
MyCat aCat = new MyCat();
aCat,weight = -10f; //设置aCat的属性值
float temp = aCat.weight;
System.out.println("The weight of a cat is:" + temp);
}
}
class MyCat{
public float weight;
MyCat(){
}
}
运行结果为: -10.0
分析:因为把weight暴露给外部了,所以外部可以通过点访问,并设置值为-10,但是对于weight属性来说是不能为负数的,那么如何来改善这种状况?这是,类的封装就可以取得很好的作用。
3.类的封装实例程序,
类的封装实例——难以访问的猫
public class TestCat{
public static void main(String[] args){
MyCat aCat = new MyCat();
aCat,weight = -10f; //设置aCat的属性值
float temp = aCat.weight;
System.out.println("The weight of a cat is:" + temp);
}
}
class MyCat{
private float weight;
MyCat(){
}
}
运行结果报错!!
与前面相比。在weight前加了修饰符private(私有),当就是这个关键,却使得下面的代码连编译都无法通过。
MyCat aCat = new MyCat();
aCat,weight = -10f; //设置aCat的属性值
float temp = aCat.weight;
private(私有)因为这个修饰符,所以外部无法访问!
类私有属性的Setter和getter —— 一只品质可控的猫
public class TestCat{
public static void main(String[] args){
MyCat aCat = new MyCat();
aCat,weight = -10f; //设置aCat的属性值
float temp = aCat.weight;
System.out.println("The weight of a cat is:" + temp);
}
}
class MyCat{
private float weight;
public void Setweight(float wt){
if(wt>o)
weight = wt;
}else{
System.out.println("weight设置失败!(weight应该>0)\n采用默认值");
weight = 10.0f;
}
public floatGetweight(){
return weight;
}
MyCat(){
}
}
保存并运行结果为 :
weight设置失败!(weight应该>0)
采用默认值
The weight of a cat is:10.0
4. 覆写
有关继承的内容请参考上一节内容!!《 [java]类的三个基本特征之一 ---- 继承》
一、覆写概念
既然现在出现了继承的关系,那么就存在了子类和父类的联系,而在子类之中有可能定义和父类完全相同的方法或属性的名称,这个时候就称为覆写了
二、方法的覆写
当子类定义了和父类在方法名称、返回值类型、参数类型及个数完全相同的方法的时候,称为方法的覆写。
没有覆写的操作:
package com.wz.overridedemo;
class A {
public void print() {
System.out.println("Hello World .");
}
}
class B extends A {
}
public class Test {
public static void main(String args[]) {
B b = new B();
b.print(); // 方法从父类继承而来
}
}
运行结果:
Hello World
这时实例化的是子类对象,但是在子类中没有print()方法,那么就使用从父类中继承而来的pritn()方法。
实现覆写:
class A {
public void print() {
System.out.println("Hello World .");
}
}
class B extends A {
public void print() { // 方法名称、参数类型及个数、返回值全相同
System.out.println("世界,你好!");
}
}
public class Test {
public static void main(String args[]) {
B b = new B();
b.print(); // 方法从父类继承而来
}
}
运行结果:
世界,你好!
多态
5.多态的基本概念
多态,从字面上理解,多态就是一种类型表现出多种状态。在Java中,多态分为两类:
a. 方法多态性,体现在方法分重写和覆写上
b . 对象多态性,体现在父、子类的转型上
6.方法的多态性
动物可以移动,但是对于不同的动物移动方式不同,比如鱼来说,移动方式就是游,鸟是飞,马是走,所以move方法实现了多态,子类通过重写move方法实现了多态。
代码如下:
class Animal{
public void move(){
System.out.println("移动");
}
}
class Fish extends Animal{
public void move(){
System.out.println("鱼游");
}
}
class Bird extends Animal{
public void move(){
System.out.println("鸟飞");
}
}
class Horse extends Animal{
public void move(){
System.out.println("马走");
}
}
public test{
public static void main(String[] args){
Animal animal = new Animal();
Animal fish = new Fish();
Animal bird = new Bird();
Animal house = new House();
animal.move();
fish.move();
bird,move();
house.move();
}
}
运行结果:
移动
鱼游
鸟飞
马走
网友评论