封装:
(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();
}
}
效果如下:
但是当将speak方法修改为:
public voidspeak(){//成员变量和局部变量同名时,如果不用this:遵循就近原则
String name = "lisi";int age = 12;
System.out.println("我叫"+name+"今年"+age+"岁");
}
效果如下:
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);
}
}
效果如下:
(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();
}
}
效果如下:
还要注意:私有成员变量(能继承到但是不能取值和赋值,相当于没继承到)
举个例子:
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();
}
}
效果如下:
(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();
}
}
效果如下: