二十五——二十七、包和访问权限
25)1.什么是java当中的软件包
2.为什么要使用软件包
软件包为java类提供了命名空间,使类可以重名,但是放在不同的命名空间里(本节课所讲的就是放在不同的文件夹里面)
3.如何给一个类打包
//将类放置到一个包当中,需要使用 package “包名”
//编译时需要使用 -d 参数,该参数的作用是依照包名生成相应的文件夹
//一个类的全名应该是“包名”+“.”+“类名”
package jiang;
class Test{
public static void main(String[] args){
System.out.println("Hello package!");
}
}
编译:javac -d . Test.java -d的作用是根据包名生成文件夹。.表示当前文件夹。
运行:java jiang.Test
这个类的全名是 org.marsdroid.user.Test 放在org/marsdroid/user文件夹下。
26)1.java中的访问权限
1.public:公共权限
类是public时,类名和文件名必须一致。
在一个包的外部需要调用这个类和它的成员,它的权限必须是public;
public可以修饰类。成员变量和成员函数;没有任何限制,同一个或者不同包当中的类都可以自由访问。
package org.marsdroid;
public class Person{ //一个包不是公共的,就无法从外包中对其进行访问。
public String name;
public int age;
public void introduce(){
System.out.println(age);
}
}
package com.mars;
class Test{
public static void main(String[] args){
org.marsdroid.Person p = new org.marsdroid.Person(); //由于Test和Person不在一个包中,需使用全名。
p.age = 20;
p.introduce();
}
}
2.private:私有权限
private可以修饰成员变量和成员函数;只能在本类中使用。
package org.marsdroid;
class Person{ //如果不是公共类,类名和文件名的名字可以不一致。
private String name;
private int age;
private void introduce(){
System.out.println(age);
}
}
package org.marsdroid;
class Test{
public static void main(String[] args){
Person p = new Person();
p.age = 20; //age 为私有变量,不能在外包调用,不管在不在同一个包下。编译会报错。
}
}
3.default:包(默认)级别访问权限
default (不写权限修饰符,就是default权限)可以修饰类、成员变量和成员函数;在同一个包中,可以自由访问。
4.protected:受保护权限
2.软件包的导入
package com.mars;
import org.marsdroid.Person;//Test类和要使用的类不在同一个包里的时候,可以导入。
//import org.marsdroid.*; 导入此包中所有的public类。
class Test{
public static void main(String[] args){
//org.marsdroid.Person p = new org.marsdroid.Person();
Person p = new Person();
p.age = 20;
p.introduce();
}
}
import只引入当前包下面的类,而不引入该包下面的子包里面的类.
27)1.访问权限与继承关系
package org.mars;
//如果子类和父类不在同一个包当中,则子类无法继承到父类当中的default权限的成员变量和成员函数;
//如果成员函数和成员变量是private权限,则它的子类不管在不在同一个包里,子类都无权限使用。
public class Person{
int age;
String name;
void eat(){
System.out.println("eat");
}
void sleep(){
System.out.println("sleep");
}
}
package com.mars;
import org.mars.Person;
class Student extends Person{
void introduce(){
System.out.println("my name is "+ name); //无法编译通过。找不到name变量。
}
}
2.protected权限
protected权限首先拥有和default一样的功能,但是该权限只能修饰成员变量和成员函数;
并且在跨包继承的时候,子类可以继承protected的成员变量和成员函数。
和public成员变量和成员函数的区别:public的成员,在所有的类中都可以使用;不同包中,只有子类可以访问父类中的protected权限的成员。
权限大小:public > protected > default > private
为体现封装性,在程序设计过程当中,类、成员变量和成员函数的权限应尽可能地小。
二十八、接口的基本语法(接口是面向对象的精髓所在)
1.什么是接口
定义了接口,就是定义调用对象的标准。
2.接口的语法
(一) 1)使用interface定义; 2)接口当中的方法都是抽象方法; 3)接口当中的方法都是public权限。
interface USB{
void read(); //接口函数前面不需要加修饰词,它也是public权限。
void write();
}
class USBphone implements USB{
public void read(){ //复写函数时,权限修饰词也一样。
System.out.println("usbphone read");
}
public void write(){
System.out.println("usbphone write");
}
}
(二)1)实现接口使用implements关键字; 2)一个类可以实现多个接口; 3)一个接口可以继承多个接口。
一个类实现多个接口语法: class USBphone implements USB,WIFI{ 复写所有的接口函数 }
3)一个接口继承多个接口。
interface A{
void funa();
}
interface B{
void funb();
}
interface C extends A,B{
void func();
}
二十九、接口的应用
1.为什么要使用接口?
2.工厂方法模式
思路:把生成对象的方法,封装在工厂里面。