鱼C论坛

 找回密码
 立即注册
查看: 2283|回复: 0

[学习笔记] JAVA学习Day9【面对对象3】

[复制链接]
发表于 2020-8-18 12:44:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
学习视频:https://www.bilibili.com/video/BV17J411G72L?p=20

163-176


  1. /*
  2. *包作用:(1)避免重名(2)分类组织管理众多的类(3)用于访问权限控制
  3. *声明包要求(1)一个源文件.java只能有一句 (2)习惯上用公司的域名倒置+模块名(com商业 org非营利性 gov政府  edu教育)
  4. *如何使用其他包的类
  5. *前提:被使用的类或成员的权限修饰词需要允许跨包使用
  6. *方式:(1)使用全名称:包.类名(2)使用import语句 + 简名(写在package和class之间)
  7. *当语句可以有很多句,导不同包的类
  8. *java.lang包中类可以不使用import语句,直接使用简名称 System String Math...
  9. *如果出现不同包,但是类名相同,只能一个使用简名称一个使用全名称,不能同时使用简名称
  10. *
  11. */

  12. //文件1
  13. package com.atguigu.pkg //文件名package/com/下的pkg文件

  14. import com.atguigu.bean.Rectangle
  15. //import com.atguigu.bean.*


  16. class test09_01{
  17.         public static void main(String[] args){
  18.                 System.out.println("dfd");
  19.                 com.atguigu.bean.Circle c1 = new com.atguigu.pkg.Circle();
  20.                 c1.printInfo();
  21.                 Rectangle r1 = new Rectangle();
  22.         }
  23. }

  24. //文件2
  25. package com.atguigu.bean

  26. public class test09_02{
  27.         public static void main(String[] args){
  28.                 private double radius;
  29.                 public Circle(){

  30.                 }
  31.                 public Circle(double r){
  32.                         radius = r
  33.                 }
  34.                 public void printInfo(){
  35.                         System.out.printIn(r);
  36.                 }

  37.         }
  38. }

  39. package com.atguigu.bean

  40. public class Rectangle{
  41.         private double length;
  42.         private double width;

  43.         public Rectangle(){

  44.         }
  45.         public Rectangle(double chang, double kuan){
  46.                 length = chang;
  47.                 width = kuan;
  48.         }
  49.         public void printInfo(){
  50.                 System.out.println(length + " " + width);
  51.         }
  52. }


  53. //统一用utf-8编码

  54. /*
  55. *快捷键ctrl + Y : 反撤销
  56. *Alt + / : 内容提示
  57. *ctrl + 1 : 快速修复
  58. *快速导包:Ctrl + shift + o
  59. *快速复制一行:选中块 ctrl + alt + 上箭头(下箭头)
  60. *快速格式化 ctrl + shift + f
  61. *查看某个类的源代码文件:(1)选中类,按ctrl 单击 (2)ctrl + shift + T 输入类名打开
  62. *多行同时编辑:Alt + Shift + A
  63. */


  64. /*
  65. *自动生成代码:1.构造器 2.get/set
  66. *Alt + Shift + S 或者选Source菜单
  67. *(1)构造器 Generate Constructor Using Fields...
  68. *(2)get/set Generate Getters And Setters...
  69. */

  70. /*
  71. *this 当前对象
  72. *(1)构造器:正在创建的对象
  73. *(2)方法:正在调用该方法的对象
  74. *用法:
  75. *(1)this.属性:当局部变量和成员变量同名时,可以在成员变量的前面加this
  76. *(2) this.方法没有非用不可的时候
  77. *(3)this()或this(实参列表)
  78. *this()表示调用本类的无参构造
  79. *this()必须在首行
  80. *this(实参列表)调用有参列表
  81. */

  82. class test09_04{
  83.         public static void main(String[] args){
  84.                 Circle c1 = new Circle(1.2);
  85.                 c1.setRadius(2.1);

  86.         }
  87. }

  88. class Circle{
  89.         private double radius;
  90.         public Circle(){
  91.                 System.out.println("dfdfd");//用法(3)

  92.         }
  93.         public Circle(double radius){
  94.                 this();//用法(3)
  95.                 this.radius = radius;//用法(1)
  96.         }
  97.         public void setRadius(double radius){
  98.                 this.radius = radius;
  99.         }
  100.         public double getRadius(){
  101.                 return radius;//没有同名问题可以不加this
  102.                 //return this.radius;
  103.         }
  104.         public double getArea(){
  105.                 return 3.14 * radius * radius;
  106.         }
  107.         public void printInfo(){
  108.                 System.out.println(radius + " " + getArea());
  109.                 //System.out.println(this.radius + " " + this.getArea());//用法(2)
  110.         }       
  111.        
  112. }

  113. class Student{
  114.         private String name;
  115.         private int age;
  116.         private char gender;
  117.         private int score;

  118.         public Student(){

  119.         }
  120.         public Student(String name, int age){
  121.                 this.name = name;
  122.                 this.age = age;
  123.         }
  124.         public Student(String name, int age, char gender, int score){
  125.                 this(name, age);
  126.                 //this.name = name;
  127.                 //this.age = age;
  128.                 this.gender = gender;
  129.                 this.score = score;
  130.         }
  131. }


  132. /*
  133. *继承
  134. *(1)延续
  135. *(2)扩展
  136. *为什么要有继承:
  137. *(1)当某个类,需要派生出很多子类别
  138. *如Person需要派生出Teacher、Student等等子类,那么Person中共有的部分就不需要在子类别中再次声明
  139. *(2)当多个类中出现共同的特征时,可以吧共同的部分提取到父类中
  140. *子类:subclass也称派生类
  141. *父类:superclass也称超类或基类
  142. *继承的特点:(1)子类继承了父类
  143. *从事物的特征来说,子类会继承父类的所有特征
  144. *但是从代码操作的角度说,父类中私有的属性、方法在子类中是不能直接使用的
  145. *(2)子类继承父类时,构造器是不能被继承的!!!!!!!!!!!!!!!!!!!!!!!
  146. *(3)子类继承父类时,在子类的构造器中一定要去调用父类的构造器
  147. *默认情况下,调用的父类无参的构造器
  148. *如果父类没有无参构造,则在子类的构造器的首行,必须手动调用父类的有参构造
  149. *(4)JAVA只支持单继承
  150. *(5)JAVA支持多层继承,即父类还有父类
  151. *(6)一个JAVA类可以同时有很多个子类,而且子类还可以有子类
  152. *(7)子类可以扩展父类没有的属性、方法
  153. */

  154. public class test09_05{
  155.         public static void main(String[] args){
  156.                 Teacher t = new Teacher();
  157.                 t.setName("dfd");
  158.                 t.setAge(18);

  159.                 //Teacher t2 = new Teacher("fd", 21);不能直接调用父类的私有构造器,根据继承的特点(2)

  160.         }
  161.        
  162. }

  163. class Person{
  164.         private String name;
  165.         private int age;
  166.         public Person(){

  167.         }
  168.         public Person(String name, int age){
  169.                 this.name = name;
  170.                 this.age = age;
  171.         }
  172.         public void setName(string name){
  173.                 this.name = name;
  174.         }
  175.         public string getName(){
  176.                 return name;
  177.         }
  178.         public void setAge(int age){
  179.                 this.age = age;
  180.         }
  181.         public int getAge(){
  182.                 return age;
  183.         }


  184. }

  185. class Teacher extends Person{
  186.         private double salary;
  187.         //public void test(){
  188.                 //System.out.println(name);不能使用
  189.         //}
  190.         public Teacher(){
  191.                 super(null, 0);//默认值
  192.         }
  193.         public Teacher(String name, int age, double salary){
  194.                 super(name, age);//感觉和this(参数列表)的用法相似
  195.                 //根据继承的特征(3),这里super必须在首行
  196.                 this.salary = salary;
  197.         }
  198. }

  199. class Student extends Person{
  200.         private int score;
  201. }

  202. class Student extends Person{
  203.        
  204. }

  205. /*
  206. *方法的重写
  207. *当子类继承了父类的方法时,但是父类的方法体不适用子类,可重写
  208. *要求:(1)方法名必须与父类被重写的方法名相同
  209. *(2)形参列表,必须和父类被重写的形参列表相同
  210. *(3)返回值类型:基本数据类型和void要求与父类被重写的方法的返回值类型相同
  211. *引用数据类型,要求子类重写的方法的返回值类型 <= 父类被重写的方法的返回值类型
  212. *例如子类方法的返回值是Student,父类被重写方法的返回值类型是Student
  213. *(4)修饰符
  214. *1.权限修饰符,子类重写的方法的权限修饰符的可见范围 >= 父类被重写方法的权限修饰符的可见性范围
  215. *例如:子类方法的修饰符是public,父类被重写方法的修饰符是protected
  216. *2.其他修饰符(之后讲)
  217. */

  218. public class test09_06{
  219.         public static void main(String[] args){
  220.                 Manager m = new Manager("dfdf", 11, 23);
  221.                 System.out.println(m.getInfo());


  222.         }
  223.        
  224. }

  225. class Employee{
  226.         //属性列表
  227.         private String name;
  228.         private double salary;
  229.         //构造器
  230.         public Employee(){

  231.         }
  232.         public Employee(String name, double salary){
  233.                 super();
  234.                 this.name = name;
  235.                 this.salary = salary;
  236.         }
  237.         //get、set
  238.         public String getName(){
  239.                 return name;
  240.         }
  241.         public void setName(String name){
  242.                 this.name = name;
  243.         }
  244.         public double getSalary(){
  245.                 return name;
  246.         }
  247.         public void setSalary(double salary){
  248.                 this.salary = salary;
  249.         }
  250.         public String getInfo(){
  251.                 return "姓名: " + name + "工资: " + salary;
  252.         }


  253. }

  254. class Manager extends Employee{
  255.         //属性列表
  256.         private double bonus;
  257.         //构造器
  258.         public Manager(){

  259.         }
  260.         public Manager(String name, double salary, double bonus){
  261.                 super(name, salary);
  262.                 this.bonus = bonus;
  263.         }
  264.         //get、set
  265.         public void setBonus(double bonus){
  266.                 this.bonus = bonus;
  267.         }
  268.         public double getBonus(){
  269.                 return bonus;
  270.         }
  271.         //重写
  272.         public String getInfo(){
  273.                 return "姓名: " + getName() + "工资: " + getSalary() + "奖金: " + bonus;
  274.         }

  275.        
  276. }


  277. /*
  278. *Super 从父类中查找,引用父类的某某
  279. *只能访问在父类中可见的属性、方法、构造器
  280. *用法:1.super.属性  当子类声明了和父类同名的属性时,可以使用super属性来访问父类的属性
  281. *2.super.方法
  282. *当子类中需要调用父类被重写的方法时,可以使用super.方法
  283. *3.super()或super(实参列表)
  284. *super()调用父类的无参结构
  285. *super(参数列表)调用父类的有参结构
  286. *必须在子类构造器的首行
  287. *如果子类的构造器中没有写super(),它也存在
  288. *但如果子类构造器中写了super(实参列表),那么super()就不会存在了
  289. */
  290.        

  291. public class test09_06{
  292.         public static void main(String[] args){       
  293.                 B b = new B();
  294.                 b.printNum(3);
  295.         }
  296. }

  297. class A{
  298.         int num = 1;
  299. }
  300. class B extneds A{
  301.         int num = 2;
  302.         public void printNum(int num){
  303.                 System.out.println(num);
  304.                 System.out.println(this.num);
  305.                 System.out.println(super.num);
  306.         }

  307. }


  308. class Human{
  309.         //属性
  310.         private String name;
  311.         private int age;
  312.         //构造器
  313.         public Human(String name, int age){
  314.                 super();//调用的是公共父类java.lang.Object类的无参构造
  315.                 this.name = name;
  316.                 this.age = age;
  317.         }
  318.         public Human(){

  319.         }
  320.         //get、set
  321.         pulic String getName(){
  322.                 return name;
  323.         }
  324.         public void setName(String name){
  325.                 this.name = name;
  326.         }
  327.         pulic String getAge(){
  328.                 return Age;
  329.         }
  330.         public void setAge(int Age){
  331.                 this.Age = Age;
  332.         }
  333.         //方法
  334.         public String getInfo(){
  335.                 return "姓名:" + name + "年龄:" + age;
  336.         }
  337. }


  338. class XueSheng extends Human{
  339.         private int score;
  340.         //.......
  341.         public String getInfo(){
  342.                 return super.getInfo() + "成绩:" + score;
  343.         }
  344. }
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 02:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表