糖逗 发表于 2020-8-18 12:44:50

JAVA学习Day9【面对对象3】

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

163-176


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

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

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


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

//文件2
package com.atguigu.bean

public class test09_02{
        public static void main(String[] args){
                private double radius;
                public Circle(){

                }
                public Circle(double r){
                        radius = r
                }
                public void printInfo(){
                        System.out.printIn(r);
                }

        }
}

package com.atguigu.bean

public class Rectangle{
        private double length;
        private double width;

        public Rectangle(){

        }
        public Rectangle(double chang, double kuan){
                length = chang;
                width = kuan;
        }
        public void printInfo(){
                System.out.println(length + " " + width);
        }
}


//统一用utf-8编码

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


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

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

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

        }
}

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

        }
        public Circle(double radius){
                this();//用法(3)
                this.radius = radius;//用法(1)
        }
        public void setRadius(double radius){
                this.radius = radius;
        }
        public double getRadius(){
                return radius;//没有同名问题可以不加this
                //return this.radius;
        }
        public double getArea(){
                return 3.14 * radius * radius;
        }
        public void printInfo(){
                System.out.println(radius + " " + getArea());
                //System.out.println(this.radius + " " + this.getArea());//用法(2)
        }       
       
}

class Student{
        private String name;
        private int age;
        private char gender;
        private int score;

        public Student(){

        }
        public Student(String name, int age){
                this.name = name;
                this.age = age;
        }
        public Student(String name, int age, char gender, int score){
                this(name, age);
                //this.name = name;
                //this.age = age;
                this.gender = gender;
                this.score = score;
        }
}


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

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

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

        }
       
}

class Person{
        private String name;
        private int age;
        public Person(){

        }
        public Person(String name, int age){
                this.name = name;
                this.age = age;
        }
        public void setName(string name){
                this.name = name;
        }
        public string getName(){
                return name;
        }
        public void setAge(int age){
                this.age = age;
        }
        public int getAge(){
                return age;
        }


}

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

class Student extends Person{
        private int score;
}

class Student extends Person{
       
}

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

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


        }
       
}

class Employee{
        //属性列表
        private String name;
        private double salary;
        //构造器
        public Employee(){

        }
        public Employee(String name, double salary){
                super();
                this.name = name;
                this.salary = salary;
        }
        //get、set
        public String getName(){
                return name;
        }
        public void setName(String name){
                this.name = name;
        }
        public double getSalary(){
                return name;
        }
        public void setSalary(double salary){
                this.salary = salary;
        }
        public String getInfo(){
                return "姓名: " + name + "工资: " + salary;
        }


}

class Manager extends Employee{
        //属性列表
        private double bonus;
        //构造器
        public Manager(){

        }
        public Manager(String name, double salary, double bonus){
                super(name, salary);
                this.bonus = bonus;
        }
        //get、set
        public void setBonus(double bonus){
                this.bonus = bonus;
        }
        public double getBonus(){
                return bonus;
        }
        //重写
        public String getInfo(){
                return "姓名: " + getName() + "工资: " + getSalary() + "奖金: " + bonus;
        }

       
}


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

public class test09_06{
        public static void main(String[] args){       
                B b = new B();
                b.printNum(3);
        }
}

class A{
        int num = 1;
}
class B extneds A{
        int num = 2;
        public void printNum(int num){
                System.out.println(num);
                System.out.println(this.num);
                System.out.println(super.num);
        }

}


class Human{
        //属性
        private String name;
        private int age;
        //构造器
        public Human(String name, int age){
                super();//调用的是公共父类java.lang.Object类的无参构造
                this.name = name;
                this.age = age;
        }
        public Human(){

        }
        //get、set
        pulic String getName(){
                return name;
        }
        public void setName(String name){
                this.name = name;
        }
        pulic String getAge(){
                return Age;
        }
        public void setAge(int Age){
                this.Age = Age;
        }
        //方法
        public String getInfo(){
                return "姓名:" + name + "年龄:" + age;
        }
}


class XueSheng extends Human{
        private int score;
        //.......
        public String getInfo(){
                return super.getInfo() + "成绩:" + score;
        }
}
页: [1]
查看完整版本: JAVA学习Day9【面对对象3】