javase 实例对象使用(1)

问题提出

项目结构

 

 

 

 

 

com.Student类

package com;

public class Student {
}
//定义缺省类型的类
class A{}

 

com.User类

复制代码
 1 package com;
 2 //相当于自动导包了,所以在一个包下面不能有重名的类
 3 //import com.*;
 4 
 5 public class User {
 6     //属性,成员属性,成员变量,
 7     //特点:成员属性在实例化时会自己初始化
 8 
 9     int id;//相当于 int id = 0;
10 
11     A a = new A();//这里就不会自动初始化了
12 
13     //方法:
14     //考虑/注意--需要什么返回类型,修饰符,参数列表
15     public int getId() {
16         //这里最好添加this关键字。养成习惯
17         //this关键字是说明就是此对象的
18         //其它前缀:类名,spuer
19         return this.id;
20     }
21     public static int pf(int i){
22         //i是形式参数,输入
23         //int i = ? 进入方法会自动将参数赋值给i
24         return i*i*i;
25     }
26 
27     //其它成员
28     //静态程序段,初始化程序段
29 }
30 
31 //public类和缺省类的区别
32 //1.其它类是否能调用;只有public类可以在同一项目模块的其它包/同一项目不同模块导入;缺省的只有同一包下的类可以使用
33 //2.public类的类名必须和文件名一致
34 //3.是否可以运行。public类可以有静态方法 public static void main(String[] args){},程序运行入口,可以运行。
35 
36 //规范:一个类占一个文件,这样文件名对应了类
37 //class A{}//这样写有问题
38 //class B{}//没有问题
复制代码

 

com.Test类

复制代码
 1 package org;
 2 
 3 import com.User;
 4 
 5 //使用类成员方式。
 6 //0,先导入类(import关键字),先能使用类,才能使用类下的成员。
 7 
 8 //1、静态成员可以直接通过类名使用,
 9     //1静态成员是属于类的,所以不存在子类继承问题和需要实例化才能使用的问题。
10     //2对比记忆非静态成员。
11 //2、实例化后使用,(大部分需要这种方式)  ---已经练习 复习1
12     //0.使用某一个实例的成员。也可以使用实例类的静态成员。
13     //1.不能实例化的类(比如抽象类,接口),不能使用这种方法。
14     //2.注意权限修饰符,public:任何类任何地方都可使用。protected修饰的成员属性,其它包下的子类会把它继承过来。缺省的成员属性,同一项目,同一模块的同一包下的实例化对象可以使用。private:只有自己可以使用,不能继承。
15     //3.对比记忆类修饰符,public和缺省。
16 //3、通过父类/实现的接口使用类  ----之后总结
17     //1.java允许,父类对象指向子类实例,或者接口指向实现类实例
18 
19 //总结:这个问题在基础阶段涉及到了这几个知识点 ---感觉贯穿整个面向对象程序设计的基础过程。慢慢更新。
20     //权限修饰符 :public / protected / / private
21     //静态修饰符 :static
22     //类其它修饰符:abstruct
23     //抽象类:
24     //接口:
25     //继承:
26     //实现:
27     //多态:
28     //内存解析:
29     //类的构造:
30 
31 
32 public class Test{
33     public static void main(String[] args){
34         //直接使用属于类的成员
35         System.out.printf("10的平方是:%f",User.pf(10));
36         //实例化后使用
37         User user = new User();
38         user.getId();
39     }
40 }
复制代码

 

 

 修饰符权限补充

项目结构

 

com.Student 类

复制代码
 1 package com;
 2 import org.Person;
 3 
 4 //作用域是 org.Student
 5 public class Student extends Person {
 6 
 7     void method(){
 8         Person  person = new Person();
 9 //        person.age = 18;
10 //        person.country = "中国";
11         person.name = "张三";
12 //        person.job = "程序员";
13         //14 //        System.out.println(person.age+person.country+person.name+person.job);
15         System.out.println(person.name);
16 
17         //方法
18 //        person.setAge((byte)30);
19 //        person.setCountry(null);
20         person.setName("李四");
21 //        person.setJob("教师");
22 //        System.out.println(person.age+person.country+person.name);
23 //        System.out.println(person.name);
24         //结论1,不同包下其他类只能调用public的成员方法和成员属性。
25 
26 
27         //在这个类下Student是把Person继承的
28         // --这里我实例化了另一个对象,用子类调用父类,
29         //这是继承的思想
30         Student student = new Student();
31         student.name = "李四";
32         //拥有了保护的。
33         student.age = 30;
34         //结论2,虽然不在同一个包下继承的子类,可以调用父类的保护的和共有的成员方法和成员属性。
35 
36     }
37 
38     //因为我继承了父类,所以我想着看看我继承了哪些方法
39     //方法覆盖 override
40 
41     void fields(){
42         super.age = 10;
43         super.name = "张三";
44     }
45     @Override
46     public void setName(String name){
47         if(name!=null||name.length()!=0){
48             super.name = name;
49         }
50     }
51 
52     @Override
53     public void setAge(byte age){
54         if(age>0){
55             super.age = age;
56         }
57     }
58 
59     //结论3:子类拥有父类的被保护的和共有的属性
60 
61 
62     //注意:拥有等于实例化父类对象后,可以使用的属性和方法。
63     //总结:子类拥有父类的属性和方法,不等于拥有使用父类属性和方法的权限。
64     //也就是权限修饰符一方面可以控制使用权限(读/写),另一方面可以控制继承权限。
65     //补充:1、权限修饰符还有一点注意:子类继承父类后,子类也要定义同名成员,为了保证子类的方法优先调用,子类成员权限不能小于父类的成员权限。
66 
67   
68 }
复制代码

 

org.Person 类

复制代码
 1 package org;
 2 //定义不同权限修饰符,用于测试成员变量和成员方法
 3 
 4 //作用域是在 org.Person  前面是包名,在导入(import),运行(java)的时候应该添加包
 5 
 6 public class Person {
 7     //公有的 public
 8     //姓名--属性/字段/成员变量
 9     public String name;
10     //方法
11     public void setName(String name) {
12         if(name!=null){
13             this.name = name;
14         }
15     }
16     protected static int counter=0;
17     //保护的
18     //年龄
19     protected byte age=0;
20     protected void setAge(byte age){
21         if(age>=0){
22             this.age = age;
23         }
24     }
25     //国家
26     String country;
27     void setCountry(String country){
28         if(country!=null){
29             this.country = country;
30         }
31     }
32     //工作
33     private String job;
34     private void setJob(String job){
35         if(job!=null) {
36             this.job = job;
37         }
38     }
39     //本类中可以调用所有的属性和方法
40     void method(String[] args){
41         //
42         Person  person = new Person();
43         person.age = 18;
44         person.country = "中国";
45         person.name = "张三";
46         person.job = "程序员";
47         //
48         System.out.println(person.age+person.country+person.name+person.job);
49 
50         //方法
51         person.setAge((byte)30);
52         person.setCountry(null);
53         person.setName("李四");
54         person.setJob("教师");
55         System.out.println(person.age+person.country+person.name);
56         //结论:本类作用域可以调用本类定义的所有方法和属性。
57     }
58 }
复制代码

 

org.Test 类

 

复制代码
 1 package org;
 2 //作用域是 org.Test
 3 public class Test {
 4     void method(String[] args){
 5         Person  person = new Person();
 6         person.age = 18;
 7         person.country = "中国";
 8         person.name = "张三";
 9         System.out.println(person.age+person.country+person.name);
10 
11 
12         person.setAge((byte)30);
13         person.setCountry(null);
14         person.setName("李四");
15         System.out.println(person.age+person.country+person.name);
16         //结论:同一个包下的其它类可以调用非保护的成员属性和成员方法
17         //不考虑一个文件下定义多个类,也就是说一个类对应一个文件,且哪个类是public类
18     }
19 }
复制代码

 权限修饰符总结:

作用

在使用类;使用实例属性,方法时需要有权限。 --类似c/c++的作用域;共享一个东西需要安全问题。

权限控制

1.非同一包下的文件导入class文件。

2.类作用修饰符:第一层控制

3.成员属性修饰符:第二层控制

posted @   liu/564  阅读(35)  评论(0)    收藏  举报
点击右上角即可分享
微信分享提示