最新Java基础系列课程--Day07-面向对象的特性(一)https://developer.aliyun.com/article/1423500
四,基本类型与包装类类型之间的自动转换
基本数据类型间除了boolean和char类型外,都可以相互转换
1 基本数据类型转包装类型–》装箱
int a =10 ; Integer i1 = a;//可以自动转,自动装箱 Integer a1 = new Integer(a);//手动装箱 Integer i = Integer.valueOf(a);
2 包装类型转基本数据类型–》拆箱
2 包装类型转基本数据类型–》拆箱
Integer a =10 ; int i1 = a;//可以自动转,自动拆箱 int i2 = a.intValue();//手动拆箱
3 把字符串转换成基本数据类型,调用包装类的parseXXX方法或者valueOf方法
3 把字符串转换成基本数据类型,调用包装类的parseXXX方法或者valueOf方法
String s = "1234"; int i = Integer.parseInt(s); double b = Double.parseDouble(s); boolean boo = Boolean.parseBoolean(s); int i = Integer.valueOf(s);
4 把基本数据类型转换成字符串
int i =9; //方法1 String s = i+""; //方法2 String s = String.valueOf(i); //方法3 String s = Integer.toString(i);
五、继承
5.1 继承快速入门
各位同学,我们继续学习面向对象相关内容。面向对象编程之所以能够能够被广大开发者认可,有一个非常重要的原因,是因为它有三大特征,继承、封装和多态。封装我们在基础班已经学过了,接下来我们学习一下继承。
接下来,我们演示一下使用继承来编写代码,注意观察继承的特点。
public class A{ //公开的成员 public int i; public void print1(){ System.out.println("===print1==="); } //私有的成员 private int j; private void print2(){ System.out.println("===print2==="); } }
然后,写一个B类,让B类继承A类。在继承A类的同时,B类中新增一个方法print3
public class B extends A{ public void print3(){ //由于i和print1是属于父类A的公有成员,在子类中可以直接被使用 System.out.println(i); //正确 print1(); //正确 //由于j和print2是属于父类A的私有成员,在子类中不可以被使用 System.out.println(j); //错误 print2(); } }
接下来,我们再演示一下,创建B类对象,能否调用父类A的成员。再写一个测试类
public class Test{ public static void main(String[] args){ B b = new B(); //父类公有成员,子类对象是可以调用的 System.out.println(i); //正确 b.print1(); //父类私有成员,子类对象时不可以调用的 System.out.println(j); //错误 b.print2(); //错误 } }
到这里,关于继承的基本使用我们就算学会了。为了让大家对继承有更深入的认识,我们来看看继承的内存原理。
这里我们只需要关注一点:子类对象实际上是由子、父类两张设计图共同创建出来的。
所以,在子类对象的空间中,既有本类的成员,也有父类的成员。但是子类只能调用父类公有的成员。
5.2 继承的好处
各位同学,学习完继承的快速入门之后,接下来我们学习一下继承的好处,以及它的应用场景。
我们通过一个案例来学习
观察代码发现,我们会发现Teacher类中和Consultant类中有相同的代码;其实像这种两个类中有相同代码时,没必要重复写。
我们可以把重复的代码提取出来,作为父类,然后让其他类继承父类就可以了,这样可以提高代码的复用性。改造后的代码如下:
接下来使用继承来完成上面的案例,这里只演示People类和Teacher类,然后你尝试自己完成Consultant类。
- 先写一个父类 People,用来设计Teacher和Consultant公有的成员。
public class People{ private String name; public String getName(){ return name; } public void setName(String name){ this.name=name; } }
- 再写两个子类Teacher继承People类,同时在子类中加上自己特有的成员。
public class Teacher extends People{ private String skill; //技能 public String getSkill(){ return skill; } public void setSkill(String skill){ this.skill=skill; } public void printInfo(){ System.out.println(getName()+"具备的技能:"+skill); } }
- 最后再写一个测试类,再测试类中创建Teacher、Consultant对象,并调用方法。
public class Test { public static void main(String[] args) { // 目标:搞清楚继承的好处。 Teacher t = new Teacher(); t.setName("播仔"); t.setSkill("Java、Spring"); System.out.println(t.getName()); System.out.println(t.getSkill()); t.printInfo(); } }
执行代码,打印结果如下:
关于继承的好处我们只需要记住:继承可以提高代码的复用性
5.3 权限修饰符
各位同学,在刚才使用继承编写的代码中我们有用到两个权限修饰符,一个是public(公有的)、一个是private(私有的),实际上还有两个权限修饰符,一个是protected(受保护的)、一个是缺省的(不写任何修饰符)。
接下来我们就学习一下这四个权限修饰符分别有什么作用。
什么是权限修饰符呢?
权限修饰符是用来限制类的成员(成员变量、成员方法、构造器…)能够被访问的范围。
每一种权限修饰符能够被访问的范围如下
下面我们用代码演示一下,在本类中可以访问到哪些权限修饰的方法。
public class Fu { // 1、私有:只能在本类中访问 private void privateMethod(){ System.out.println("==private=="); } // 2、缺省:本类,同一个包下的类 void method(){ System.out.println("==缺省=="); } // 3、protected: 本类,同一个包下的类,任意包下的子类 protected void protectedMethod(){ System.out.println("==protected=="); } // 4、public: 本类,同一个包下的类,任意包下的子类,任意包下的任意类 public void publicMethod(){ System.out.println("==public=="); } public void test(){ //在本类中,所有权限都可以被访问到 privateMethod(); //正确 method(); //正确 protectedMethod(); //正确 publicMethod(); //正确 } }
接下来,在和Fu类同一个包下,创建一个测试类Demo,演示同一个包下可以访问到哪些权限修饰的方法。
public class Demo { public static void main(String[] args) { Fu f = new Fu(); // f.privateMethod(); //私有方法无法使用 f.method(); f.protectedMethod(); f.publicMethod(); } }
接下来,在另一个包下创建一个Fu类的子类,演示不同包下的子类中可以访问哪些权限修饰的方法。
public class Zi extends Fu { //在不同包下的子类中,只能访问到public、protected修饰的方法 public void test(){ // privateMethod(); // 报错 // method(); // 报错 protectedMethod(); //正确 publicMethod(); //正确 } }
最新Java基础系列课程--Day07-面向对象的特性(三)https://developer.aliyun.com/article/1423502