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.成员属性修饰符:第二层控制
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步