java封装与继承

封 装

防止用户在main()方法中设置错误变量数值,因此采用private关键字封装。私有化后主函数将无法直接调用被private定义的属性,方法,构造器和内部类。

体现:私有化(private)后,因无法直接调用,所以将提供公共(public)的getxxx()和setxxx()来获取和设置此属性。

作用:保护代码安全性和有效性。

例如:

public class Order {
    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;
    }
}

四种访问权限修饰符

修饰符           类内部      同一个包       不同包子类     同一工程

private          yes

缺省(default)    yes          yes

pritected        yes          yes            yes

  public                    yes                 yes                    yes                  yes

继 承

与多态,封装共为面向对象的三大特征。继承使子类具有父类非私有化的属性或方法,还可以追加继承类特有的属性或方法,或者是重写来重新定义被继承类的方法或属性。

class A extends B{}

A:子类,派生类

B:父类,超类,基类

体现:子类A继承父类B后,A就获得B中声明的结构:属性和方法。

①父类中声明private的属性或方法,继承后,虽然因为封装类的特点,子类不能直接调用父类结构,但仍认为获取了父类中私有的结构。

②子类与父类的关系不同于数学中的子集和集合的关系(子类的功能更加强大)

继承性特点:

①不允许一个子类多重继承多个父类,但允许一个父类被多个子类继承。

②只支持单继承,多继承,不允许多重继承

public class Animals {
   String name;
   private int age; 
   void eat(){
       System.out.println("宠物吃饭");
   }
}
public class Cat extends Animals {
    void play(){
        System.out.println("猫玩游戏");
    }
}
public class text {
    public static void main(String[] args) {
        Cat c=new Cat();
        c.eat();
    }
}

结果:宠物吃饭

即Cat类继承了Animals类,堆空间中获取了Animals的所有属性和方法,即使被private修饰的无法直接调用,也存在于堆空间中.

this 和 super 的区别:

this

this调用方法调用的是当前对象,可以调用属性,方法,构造器,一般类中属性前都有this关键字,只不过省略了。

public void setAge(int age){

this.age=age;

}

为了增加代码的可读性,形参中存储的变量名一般采用直观的方法描述,但也因此导致形参与属性名字重合,这时就需要this关键字进行区别,this.age是类中的属性,age是所给的形参。

同样的,调用构造器也可以用this,即:

this(形参列表);

this调用构造器时需要注意:

①不能自己调自己。

②调多少次都只有一个对象。

③不能形成调用闭环(即n个构造器最多只能由n-1个"this(形参列表)"):

④"this(形参列表)"必须放构造器首行!(因此一个构造器只能有一次调用"this(形参列表)")

super

super调用方法调用的是父类对象,可以调用属性,方法,构造器

当子类和父类定义同名属性,想要在子类中调父类声明属性,需使用"super.属性",表明父类中声明的属性。

public class Animals {
   String name;
   int age=10; 
   void eat(){
       System.out.println("宠物吃饭");
   }
}
public class Cat extends Animals {
    int age=20;
    void play(){
         System.out.println(super.age);
    }
}
public class text {
    public static void main(String[] args) {
        Cat c=new Cat();
        c.play();
    }
}

结果:10

super也可用来调用构造器,即:

super(形参列表);

super调用构造器时需要注意:

①子类构造器,方法中,用"super.属性/方法"调用父类声明属性和方法,但通常省略。

②"super(形参列表)"必须放子类构造器首行!

③类构造器中"super(形参列表)"和"this(形参列表)"只能二选一,不能同时出现

④构造器首行没有"super(形参列表)"或"this(形参列表)",则默认调用父类空参构造器。

⑤类多个构造器中,至少有一个构造器用"super(形参列表)"调用父类构造器

重写 与 重载 的区别:

重载:在同一个类中,方法名相同,参数列表不同,同一个类中各个构造器互相构成重载。

重写:子类继承父类方法,以相同的方法名和参数列表重新定义方法。

①子类中叫重写的方法,父类中叫被重写的方法。

②以继承关系为前提,没有继承就没有重写。

③子类权限修饰符要大于等于父类。

父:public void eat(){}

子:class eat(){}   //不可行

④父类被重写方法返回值是A类型,则子类重写应为A类或A子类,父类返回值是基本数据类型,则子类也为相同的基本数据类型。

父:public Object eat(){return null;}

子:public String eat(){return null;}  //可行

⑤子类抛出异常类型应不大于父类。

⑥子类父类同名同参方法,要么都非static(考虑重写),要么都static(不是重写)

包装类

基本数据类型               包装类

byte                                Byte

short                               Short

int                                   Integer

long                                Long

float                                Float

double                            Double

boolean                          Boolean

char                                Character

基本数据类型 , 包装类 和 String类 之间的相互转换

装箱:基本数据类型转换成包装类

拆箱:包装类转换成基本数据类型

基本数据类型转包装类:

原理:调用包装类构造器(基本数据类型无法调用方法)

Interger in=new Integer(10);//Integer是类,可以调用方法

注意:

①boolean为空时,因其为基本数据类型,所以是false;Boolean为空时,因其为类,所以为null

②Boolean转换时,若boolean不为"true",则都为false("True"也是false)

包装类转基本数据类型:

因类无法进行运算,需转基本数据类型

方法:调包装类Xxx的xxxValue()方法,即:

int i=in.intVolue();

自动装箱和自动拆箱

JDK5.0新特性

自动装箱:基本数据类型直接转换成包装类,即

Integer in=10;//可行

自动拆箱:包装类直接变成基本数据类型,即

Integer in=new Integer(10);int i=in;//可行

PS:Integer内部定义了IntegerCache结构,其中有Integer[]保存-128---127的所有整数,若自动装箱,给Integer赋值在-128---127范围内,则直接使用数组中元素(地址值相同),不必去new,提高效率

基本数据类型,包装类与String之间的转换

一.基本数据类型转String

方法一:连接运算:String s=10+"";

方法二:调用String中的balueOf(xxx),即:

String s=String.valueOf(10);

二.String转基本数据类型

调包装类的parsexxx(String s)方法,即:

int i=Integer.parseInt(str);

三.包装类转String

调用包装类对象的toString(形参)方法,即

String s=in.toString();

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值