14_封装、继承
一. 方法的参数传递、返回值
Java语言在给被调用方法的参数赋值时,采用 传值(值传递) 的方式:
- 基本类型数据传递的是该数据的值本身;
- 引用类型数据传递的也是这个变量的值本身,即对象的地址(引用),而非对象本身.
//类
public class PassValue{
public void change(int x){
x = 100;
System.out.println("方法中x==" + x);
}
}
//类
public class Test{
public static void main(String[] args){
PassValue pv = new PassValue();
int x = 5;
System.out.println("方法调用之前x=="+ x);
pv.change(x); System.out.println("方法调用之后x==" + x);
}
}
2. 引用数据类型传递
数组、类、String(比较特殊特点:和基本类型一样).
public class PassValue2{
int x ;
public void change(PassValue2 obj){
obj.x = 100;
System.out.println(“方法中obj.x==” + obj.x);
}
}
public class Test{
public static void main(String[] args){
PassValue2 p = new PassValue2();
p.x = 5;
System.out.println(“方法调用之前p.x==” + p.x);
p.change(p);
System.out.println(“方法调用之后p.x==” + p.x);
}
}
3. 上机练习:
编写学生类:
学号,姓名,年龄,地址;
显示信息方法.
编写学生管理类:
输入学生信息(学生作为方法返回值);
修改学生信息(学生作为参数传递).
4. 基本类型和引用类型作为方法的返回值
基本类型返回的实际数据,引用类型返回的是对象的地址.
二. 封装性
Java语言有三大特征:
封装(encapsulation): 对外部不可见,隐藏对象的属性和实现细节.
继承(inheritance): 一个类继承另一个类的成员.
多态(Polymorphism): 每个对象表现的多样性.
1. 封装的概念
什么是封装:
在类中,对于不想被类外直接访问的成员变量,进行私有化,
同时对外提供一个公有的方法访问私有的成员.
封装成员变量两个步骤:
第一步: 添加private 修饰符;
第二步: 添加get和set方法.
2. private
使用private访问权限实现成员变量的私有化,private修饰的成员变量就是私有成员变量,只能在类内部直接访问,类外不能直接访问.
3. get和set方法
get方法表示访问私有属性的方法: 语法:
public 属性类型 getXxx(){ return 属性;
}
set方法表示修改私有属性的值的方法:
public void setXxx(参数类型 参数){ this.xxx = 参数;
}
示例
package com.syc.day09_4;
/**
* 人类
* 属性:姓名年龄性别
* 方法: eat study *
* 封装:(1)把成员变量变成私有的 (2) 添加get和set方法 * @author wgy
*
*/
public class Person {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>100||age. 同一个类中,方法名相同,参数列表不同(个数不同,类型不同,顺序不同);
2>. 和方法返回值,访问修饰符无关.
2. 方法重写
在继承过程中,子类中从父类继承来的方法无法满足自己的需求时,可以在子类中对父类方法进行完善,这个完善过程叫做方法重写(override),方法的重写相当于在子类中覆盖父类中的方法.
示例
public class Animal { //属性
String nickname;
String color;
String strain;
//默认构造方法
public Animal() {
System.out.println("父类Animal的构造方法执行了..........");
}
//带参构造方法()
public Animal(String nickname,String color,String strain){
this.nickname=nickname;
this.color=color;
this.strain=strain;
}
//打印方法
protected Object printInfo() {
System.out.println("本动物 昵称:"+nickname+" 颜色:"+color+" 品种:"+strain);
return 10;
}
}
public class Dog extends Animal{
int love;
//默认构造方法
public Dog() {
super();//调用父类的默认构造方法
System.out.println("Dog子类的构造方法执行了");
}
//带参构造方法
public Dog(String nickname,String color,String strain,int love) {
super(nickname, color, strain);//调用父类的带参构造
this.love=love;
}
/**
* 看家
*/
public void lookHome() {
System.out.println(nickname+"正在给主人看家....");
}
/**
* 重写: 覆盖
* 1.方法名相同;
* 2.方法参数,返回值类型必须相同;
* 3.访问修饰符不能比父类严格.
* java特殊 1.7 返回值,可以和父类兼容就可以,
* 必须是引用类型
*/
public String printInfo() {
System.out.println("狗狗信息:昵称:"+super.nickname+" 颜色:"+super.color+" 品
种:"+super.strain+" 亲密度:"+this.love);
return "haha";
}
}
3. 方法重写规则
访问权限 其他修饰符 返回值 方法名(参数列表)
1. 在继承过程中,方法名、参数列表、返回值类型必须和父类相同;
2. 访问修饰符不能比父类严格.
Java特殊处:
JDK1.7之后,方法的返回值可以和父类兼容就可以,但是必须是引用类型.
4. 方法的重写和方法的重载的区别
方法的重载: Overload,在同一个类中,方法名相同,参数类别不同,互为重载方法.
方法的重写: Override,在继承过程中,在子类中重写父类中继承来的方法,方法名、参数列 表、返回值必须相同,访问权限不能比父类严格.
5. 有关方法重写之后的调用:
只要在子类中重写了父类的方法,通过子类对象调用该方法一定是子类重写的方法.
八. 总结
1. 方法传参、返回值:
方法传参采用传值:
基本类型传递的数据本身,引用类型传递的是地址;
返回值: 基本类型返回数据本身,引用类型返回地址.
2. 封装:
隐藏类的实现细节,保证程序安全.
2个步骤:
第一步: 私有化成员变量;
第二步: 添加get和set方法.
3. static关键字:
静态:
成员变量或方法属于所有对象共有的,不属于每个对象,使用静态.
4. 继承:
在原有类的基础上,产生一个新的类,在新的类中可以访问原有类中的非私有成员,并且可以添加一些自己独有的成员,这个过程叫做继承,简单理解一个类继承另外一个类.
关键字: extends
继承符合 is a 关系.
继承特点: 单继承;继承具有传递性.
5. super关键字:
表示当前父类对象的引用.
super.属性
super.方法
super(参数);
调用父类的构造方法;
this和super的区别.
6. 包:
管理类,解决类的命名冲突问题.
域名倒置+项目名:
package com.syc.day09; 必须是第一句.
导包:
import java.util.*;
7. 访问权限修饰符:
public: 公开的;
protected: 包含的;
[default]: 默认的;
private: 私有的.
类可以用 public 或默认的权限修饰符;
成员变量和方法 四个权限修饰符都可以用.
8. 方法重写:
重写规则:
①. 在继承中,方法名、参数列表、返回值必须和父类的方法相同;
②. 访问权限不能比父类更严格.