Java学习记录(补充三:面向对象的封装和继承)

面向对象的封装package day7;
//面向对象的封装
public class Employee {
    String name = "zhangsan";
    private int age;
    //多个方法重载
    public Employee(){

    }
    public Employee(String name,int age){

    }
    public Employee(int age,String name){

    }

    //可以在方法里修改不能访问的属性
    public int getAge(){
        return age;
    }

    public void setAge(int age) {
        if(age>=1&&age<=120){
        this.age = age;
    }else{
        this.age =18;
    }

    }
    public void say(){
        System.out.println(name);
        System.out.println(age);
    }

}
package day7;

public class EmployeeTest {
    public static void main(String[] args) {
        Employee user = new Employee();
        //存在问题的赋值
//        user.age = 1000;
        //使用封装进行属性额隐藏,添加相关的get set方法
        //供外部程序调用
        user.setAge(50);
        System.out.println(user.getAge());
    }
}

结果图;

面对对象继承package day7_1;

//继承:只能单继承!!!
//子类不能访问父类private成员
//不能继承:子类与父类不在同包,使用默认访问权限的成员,
//子类不能访问父类的构造函数
public class Engineer {
    int no;
    private String name;
    private String enterTime;

    public Engineer() {
        System.out.println("父类的构造函数");
    }

    public void showInfo() {
        System.out.println("展示信息");
    }
}
package day7_1;

public class SoftEngineer extends Engineer {

    private String type;

    public SoftEngineer() {
        System.out.println("子类的构造函数");
    }
    public void coding() {
        super.showInfo();
        System.out.println("我在写bug!");
    }
    // 重写:返回值类型, 方法名和参数列表都相同.
        //访问修饰符不能比父类更严格
    @Override
    public void showInfo(){
        super.showInfo();
        System.out.println("我是软件工程师");
    }
}
package day7_1;

//在子类里可以通过super关键字调用父类里公开的属性或方法
public class TestEngineer extends Engineer {

    private String level;

    public TestEngineer() {
        System.out.println("子类的构造函数");
    }

    public void test() {

        System.out.println("我在Debug!");
    }

    public void showInfo() {
        System.out.println("我是测试工程师");
    }

    //重载
    public void showInfo(int i) {
        System.out.println("我是重载");
    }
}
 package day7_1;

public class Test {
    public static void main(String[] args) {
        SoftEngineer user1 = new SoftEngineer();
        user1.showInfo();
        TestEngineer user2 = new TestEngineer();
        user2.showInfo(3);
    }
}

结果图:

abstract:限制实例化package day7_4;
//abstract:限制实例化,让这个类只能提供继承,只能用于类和方法,不能给属性
public abstract class Instrument {
    //1:抽象类不能被实例化,只能起到被继承的作用
    //2:抽象类里的抽象方法必须被子类实现  除非子类也是抽象类
    //3:抽象方法必须放在抽象类里面
    //4:抽象类里不一定全是抽象方法
    //5:抽象方法没有方法体
    String brand;
    String weight;
    public abstract void play();

    public void show(){

    }
}
package day7_4;
//final 最后的,无法让这个类或方法或属性被继承
public  class Piano extends Instrument {
     final String size = "123";
    //重写了父类里面的play方法
    @Override
    public  void play(){
        System.out.println("我用弹的");
    }
    public final void  showCompany(){
        System.out.println("made in China");
    }
}
package day7_4;

public class Violin extends Instrument {
    int length;

public void play(){
    System.out.println("我是用拉的");
}
}
package day7_4;

public class Test {
    public static void main(String[] args) {

        Piano user1 = new Piano();
        user1.play();
        Violin user2 = new Violin();
        user2.play();

    }
}

结果图:

Static:静态方法public class User {
    //成员属性
    int age;
    int height;
    //类属性
    static int weight = 60;
    //成员方法
    public void show(){
//        User.age; 成员属性和方法不能直接由类来调用
        System.out.print(User.weight);
    }
    public static void showWeight(){
        System.out.println(User.weight);
        //在静态方法里不允许调用非静态属性
//        System.out.println(User.age);
    }
}
package day7_5;

public class UserTest {
    public static void main(String[] args) {
        User user = new User();
        user.age = 10;
        User.weight = 100;
        User.showWeight();

//        Arrays.sort(arg0);
        //1:没有用static修饰的属性和方法,被称为成员属性和成员方法
        //成员属性和成员方法只能由对象来调用
        //2:使用static修饰的属性和方法被称为类属性,
        //类属性和类方法可以由类来调用
        //也可以由对象来调用
    }
}

结果图:

时间: 2024-10-14 06:07:47

Java学习记录(补充三:面向对象的封装和继承)的相关文章

Java学习记录(补充一(以习题为主:判断,循环语句))

习题1:取一个四位数,求各个位数数字的和package Day2; import java.util.Scanner; public class Demo01 { public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.println("请输入你的卡号"); int cardNum = in.nextInt(); // 1234 int i1 = cardNum %

Java学习记录(补充二:面对对象基础复习,习题)

求3(可调整)个学员成绩的和或平均分或两者都具package day5; import java.util.Scanner; public class Score { //构造函数 public Score(){ System.out.println("实例化对象调用了我"); } int sum; double avg; // 定义求和的方法 public int sum() { Scanner scanner = new Scanner(System.in); for (int i

Java学习记录(补充八:Date类;Java流(Stream),文件(File)和IO)

Date类,Calendar类package Box1; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Random; //Date类 public class DateTest { public static void main(String[] args) { Date

Java学习记录(补充七:一些工具类)

Math类package Box; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class TestBox { public static void main(String[] args) { //八个包装类 /*Integer i=5;//在栈里面开辟了一个内存空间(基本数据类型) Integer n = new Integer(5);//用new在堆里面开辟了一

C#学习记录3上——类的封装,继承,多态

OOP面向对象的三大特点:封装(encapsulation),继承(inheritance),多态(encapsulation) 和JAVA与C++一样,C#也是OOP语言.并且,C#对数据的封装要比C++更好.另外,在C++里面可能习惯从main函数开始程序,类是作为主函数的一部分而存在的.而C#里面,所有的所有都是在某个类中进行. 这里还是说C#较其他语言不一样的地方. 有关类Class 1.方法参数Arguments和传递参数Parameters 首先说一下这两个词的区别.其实都是指参数,

C#学习记录3下——类的封装,继承,多态

new,virtual,override三者的区别 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Example 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Shape sh

Java学习总结(三)——面向对象(上)

Java学习总结(三) -面向对象(上) 一.面向对象的概念及思考方式 面向对象的理解:是一种编程思想,他将对象作为解决问题的基本元素,利用对象与对象之间的相互作用来设计程序. 2.面向对象的思考方式:(1)首先确定问题域中的对象 (2)确定对象的特征与功能 (3)了解对象与对象之间的关系 例:设计一个五子棋游戏的对象:·黑白双方对象     ·绘制棋盘     ·输赢规则 二.类与对象 1.对象:用来描述客观事物的一个实体,由一组属性和行为构成. 2.类:(1)是一个模板,他描述一类对象的行为

java学习记录(1):layout

BorderLayout布局管理器:BorderLayout 也是一种非常简单的布局策略,它把容器内的空间简单地划分为:North,South,East,West和Center 5个区域,每加入一个组件都应该指明把这个组件加在哪个区域中.BorderLayout是顶层容器(Window,Frame, Dialog)的默认布局管理器. BorderLayout界面最多只能显示5个控件,若在一个区域中加上多个component,则只有最后加上的那个是可见的.加入控件的时候,可以指定加入的方位,默认的

java学习记录(2):JMenuBar

1.在用这个时候发现很多的组件都有J的前缀,例如Button和JButton,前者是awt包的,后者是swing包的,两者耳朵区别是: AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口.AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,我们把它称为peers. 也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库.由于不同操作系统的图形库所提供的功能