java封装继承_java 的 封装 、继承

封装:

(1)好处:

提高代码的复用性;

隐藏实现细节,提供可以访问的方式(概念);

提高安全性;

(2)私有private:(私有仅仅是封装的体现形式而已)

只能在本类中使用【隐藏实现细节】;

对成员属性提供方法(赋值、取值):【提供可以访问的方式】

举个例子:

packagecom.oracle.demo01;//定义一个手机类Phone,包含三个属性品牌(brand)、价格(price)、颜色(color)。

public classphone {privateString brand;private doubleprice;privateString color;publicString getBrand() {returnbrand;

}public voidsetBrand(String brand) {this.brand =brand;

}public doublegetPrice() {returnprice;

}public void setPrice(doubleprice) {if(price > 0){ 可以对属性设置条件this.price =price;

}else{this.price = 0;

}

}publicString getColor() {returncolor;

}public voidsetColor(String color) {this.color =color;

}

}

当我们对属性进行赋值和取值时,使用的是方法;

举个例子:

packagecom.oracle.demo02;public classtest {public static voidmain(String[] args) {

person p= newperson();/*p.age = 12;

p.name = "zhangsan";*/p.setAge(12);

p.setName("zhangsan");

p.speak();

}

}

(3)this:(对象,哪个对象调用了this所在的方法,this就代表哪个对象)

成员变量和局部变量的同名问题(注:遵循就近原则,不用this时)

举个例子:

public classperson {privateString name;private intage;public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public voidspeak(){//成员变量和局部变量同名时,如果不用this:遵循就近原则

String name = "lisi";int age = 12;

System.out.println("我叫"+this.name+"今年"+this.age+"岁");

}

}

建立测试类

packagecom.oracle.demo02;public classtest {public static voidmain(String[] args) {

person p= newperson();

p.setAge(12);

p.setName("zhangsan");

p.speak();

}

}

效果如下:

7f7888578cf3262fb0a23dc0bd442fd0.png

但是当将speak方法修改为:

public voidspeak(){//成员变量和局部变量同名时,如果不用this:遵循就近原则

String name = "lisi";int age = 12;

System.out.println("我叫"+name+"今年"+age+"岁");

}

效果如下:

cfffceb65628ac7fa15c51b3ac5d19c7.png

2、继承:

(1)继承的格式&使用:

class 子类 extends 父类 {}

子类在继承父类的时候,会自动拥有父类可继承的成员。

packagecom.oracle.demo03;//员工类(父类)

public classemployee {

String name;public voidspeak(){

System.out.println("员工正在工作");

}

}

packagecom.oracle.demo03;//研发类员工(子类)//子类继承父类:自动拥有所有可继承的成员

public class developer extendsemployee {

}

建立一个测试类

packagecom.oracle.demo03;public classtest {public static voidmain(String[] args) {

developer d= newdeveloper();

d.name= "zhangsan";

d.speak();

System.out.println(d.name);

}

}

效果如下:

b326eea557b94ca9df47594012888469.png

(2)继承的好处&注意事项:

好处:提高了代码的复用性;

提供了多态的前提;

(3)成员变量:

先要注意:就近原则

packagecom.oracle.demo04;public classfather {int a = 1;

}

packagecom.oracle.demo04;//在继承中,成员变量的特点 : 如果父类成员变量和子类成员变量同名,那么调用是子类成员变量。

public class son extendsfather{int a = 2;public voidspeak(){//遵循就近原则

System.out.println(a);

}

}

建立测试类:

packagecom.oracle.demo04;public classtest {public static voidmain(String[] args) {

son s= newson();

s.speak();

}

}

super.父类中的成员变量

packagecom.oracle.demo04;public classfather {int a = 1;

}

packagecom.oracle.demo04;//super.父类中的成员变量

public class son extendsfather{int a = 2;public voidspeak(){

System.out.println(super.a);

}

}

建立测试类:

packagecom.oracle.demo04;public classtest {public static voidmain(String[] args) {

son s= newson();

s.speak();

}

}

效果如下:

8c9d13dfaee705e53e8891cc2ca8975f.png

还要注意:私有成员变量(能继承到但是不能取值和赋值,相当于没继承到)

举个例子:

packagecom.oracle.demo04;public classfather {private int a = 1;public intgetA() {returna;

}public void setA(inta) {this.a =a;

}

}

packagecom.oracle.demo04;//在继承中,成员变量的特点 : 如果父类成员变量和子类成员变量同名,那么调用是子类成员变量。

public class son extendsfather{int b = 2;public voidspeak(){//遵循就近原则

System.out.println(a); 报错 这里a相当于没继承到

}

}

建立测试类:

packagecom.oracle.demo04;public classtest {public static voidmain(String[] args) {

son s= newson();

s.setA(0); 方法中对A进行赋值和取值

s.getA();

}

}

(4)成员方法:

packagecom.oracle.demo05;public classfather {public voidzhengqian(){

System.out.println("父类成员方法");

}

}

packagecom.oracle.demo05;public class son extendsfather{public voideat(){

System.out.println("子类成员方法");

}

}

建立测试类:

packagecom.oracle.demo05;public classtest {public static voidmain(String[] args) {

son s= newson();

s.eat();

s.zhengqian();

father f=newfather();//f.eat();

}

}

效果如下:

fa356fd90bc443b7c498caf256b38b00.png

(5)方法重写:

方法的返回值类型 方法名 参数列表都要一样;

举个例子:(手机更新)

旧手机:

packagecom.oracle.demo06;public classphone {public voidcall(){

System.out.println("打电话");

}public voidsend(){

System.out.println("发短信");

}public voidshow(){

System.out.println("显示电话号码");

}

}

新手机:

packagecom.oracle.demo06;public class iphone extendsphone{//重写

public voidshow(){super.show();

System.out.println("显示姓名");

System.out.println("显示头像");

}

}

测试类:

packagecom.oracle.demo06;public classtest {public static voidmain(String[] args) {

iphone i= newiphone();

i.call();

i.show();

}

}

效果如下:

1e6979722fdfd39f7cd252c9118a4719.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值